Воспроизведение мультимедийных файлов, расположенных в папке активов - PullRequest
4 голосов
/ 12 ноября 2011

В настоящее время у меня есть набор мультимедийных файлов в папке raw проекта android, которые быстро загружаются и воспроизводятся при вызове с использованием класса mediaplayer.Мне нужно добавить больше вариантов этих файлов и распределить их по папкам, но, очевидно, папка raw не поддерживает папки.Смогу ли я быстро загрузить эти файлы из папки ресурсов и воспроизвести их с помощью медиаплеера?Если да, то как?

Ответы [ 3 ]

6 голосов
/ 12 ноября 2011

У меня есть этот метод, который возвращает все файлы по расширению в папке внутри папки активов:

public static String[] getAllFilesInAssetByExtension(Context context, String path, String extension){
        Assert.assertNotNull(context);

        try {
            String[] files = context.getAssets().list(path);

            if(StringHelper.isNullOrEmpty(extension)){
                return files;
            }

            List<String> filesWithExtension = new ArrayList<String>();

            for(String file : files){
                if(file.endsWith(extension)){
                    filesWithExtension.add(file);
                }
            }

            return filesWithExtension.toArray(new String[filesWithExtension.size()]);  
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

, если вы вызываете его с помощью:

getAllFilesInAssetByExtension(yourcontext, "", ".mp3");

, это вернет всемои mp3-файлы в корне папки assets.

, если вы вызываете его с помощью:

getAllFilesInAssetByExtension(yourcontext, "somefolder", ".mp3");

, в «somefolder» будет искать mp3-файлы

список всех файлов, которые нужно открыть, вам понадобится:

AssetFileDescriptor descriptor = getAssets().openFd("myfile");

Чтобы воспроизвести файл, просто сделайте:

MediaPlayer player = new MediaPlayer();

long start = descriptor.getStartOffset();
long end = descriptor.getLength();

player.setDataSource(this.descriptor.getFileDescriptor(), start, end);
player.prepare();

player.setVolume(1.0f, 1.0f);
player.start();

Надеюсь, это поможет

5 голосов
/ 12 ноября 2011

Вот функция, которая может воспроизводить медиафайлы из папки вашего ресурса.И вы можете использовать его с чем-то вроде play(this,"sounds/1/sound.mp3");

private void play(Context context, String file) {
    try {
        AssetFileDescriptor afd = context.getAssets().openFd(file);
        meidaPlayer.setDataSource(
                afd.getFileDescriptor(),
                afd.getStartOffset(),
                afd.getLength()
            );
        afd.close();
        meidaPlayer.prepare();
        meidaPlayer.start();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
0 голосов
/ 31 мая 2016

Вы можете поместить свои mp3-файлы в папку: res / raw как myringtone.mp3 или по своему желанию.

MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.myringtone);
mediaPlayer.start();
...