Java 使用SQLite播放来自资产的音频
我的问题是我的代码不起作用。我的资产/国歌文件夹中有100多个mp3存储Java 使用SQLite播放来自资产的音频,java,android,Java,Android,我的问题是我的代码不起作用。我的资产/国歌文件夹中有100多个mp3存储 flAnthem = c.getString(c.getColumnIndex(KEY_ANTHEM)); flAnthemSDCard = c.getString(c.getColumnIndex(KEY_ANTHEM_SDCARD)); AssetManager assetManager= getAssets(); InputStream inputStream = null; try{ inputStrea
flAnthem = c.getString(c.getColumnIndex(KEY_ANTHEM));
flAnthemSDCard = c.getString(c.getColumnIndex(KEY_ANTHEM_SDCARD));
AssetManager assetManager= getAssets();
InputStream inputStream = null;
try{
inputStream = assetManager.open("anthem/" + flAnthem);
mediaPlayer.setDataSource(String.valueOf(inputStream));
mediaPlayer.prepare();
mediaPlayer.start();
}catch(IOException e){
e.printStackTrace();
}
替换此 通过使用
AssetFileDescriptor
flAnthem = c.getString(c.getColumnIndex(KEY_ANTHEM)) + ".mp3"; // don't forget extension
AssetFileDescriptor descriptor = getAssets().openFd("anthem/"+mediaName);
mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
顺便说一句
- 检查此问题以了解有关以下内容的更多信息:
catch
块?是的,它不是。只是仔细检查是否有任何愚蠢的事情,媒体文件是否可以从其他应用程序或您的PC播放?您的音量是否正确?能否在mediaPlayer.start()
之后放置一个Log.i
语句,看看它是否出现在Logcat中?如果您的代码没有进入catch块,则表明您的代码运行良好。请您解释一下这将如何帮助解决OP的问题?为什么考虑振铃器模式会增加额外的复杂性?OP正在使用AssetManager
获取资源,而不是资源ID。我现在正在更新我的问题以解决此问题,感谢您的帮助feedback@MichaelDodd我用AssetFileDescriptor
修正了我的答案,顺便说一句,我创建了一个示例应用程序,这对我很有用。木材是干什么用的?@KhaledLela Duely指出,感谢您使Stack Overflow成为未来读者更有用的地方;)
flAnthem = c.getString(c.getColumnIndex(KEY_ANTHEM)) + ".mp3"; // don't forget extension
AssetFileDescriptor descriptor = getAssets().openFd("anthem/"+mediaName);
mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());