Java 使用SQLite播放来自资产的音频

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

我的问题是我的代码不起作用。我的资产/国歌文件夹中有100多个mp3存储

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());
顺便说一句

  • 检查此问题以了解有关以下内容的更多信息:

您好,您的代码以何种方式“不起作用”?你在Logcat中有错误吗?我没有错误。但是它不是在播放MP3,所以代码不属于
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());