播放位于资源文件夹中的媒体文件

时间:2011-11-12 18:45:45

标签: android assets android-mediaplayer

我目前在android项目的raw文件夹中有一组媒体文件,这些文件在使用mediaplayer类调用时可以快速加载并播放。我需要添加这些文件的更多变体并将它们分类到文件夹中,但显然原始文件夹不支持文件夹。我是否能够从assets文件夹快速加载这些文件并使用mediaplayer播放它们?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:6)

我有这种方法可以在资产文件夹内的文件夹中按扩展名返回所有文件:

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文件。

如果您使用以下方式调用它:

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();

希望这有帮助

答案 1 :(得分:5)

这是一个可以从资产文件夹中播放媒体文件的功能。你可以像play(this,"sounds/1/sound.mp3");

一样使用smth
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();
    }
}

答案 2 :(得分:0)

您可以将您的mp3文件放在:res / raw文件夹中,如myringtone.mp3或您的意愿。

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