I currently have a set of media files in the raw folder of the android project that are loaded quickly and played when called using the mediaplayer class. I need to add more variations of these files and categorize them into folders, but apparently the raw folder does not support folders. Would I be able to quickly load these files from the assets folder and play them with mediaplayer? If so, how?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
I've this method that returns the all files by extension in a folder inside asset folder:
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;
}
if you call it using:
getAllFilesInAssetByExtension(yourcontext, "", ".mp3");
this will return all my mp3 files in the root of assets folder.
if you call it using:
getAllFilesInAssetByExtension(yourcontext, "somefolder", ".mp3");
this will search in "somefolder" for mp3 files
Now that you have list all files to open you will need this:
AssetFileDescriptor descriptor = getAssets().openFd("myfile");
To play the file just do:
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();
Hope this helps
回答2:
Here is a function that can play mediafiles from your asset folder. And you can use it with smth like 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();
}
}
回答3:
You could put your mp3 files at : res/raw folder as myringtone.mp3 or as your wish.
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.myringtone);
mediaPlayer.start();