我一直坚持这个特定的问题已经有一段时间了,这应该是非常简单的,所以它很烦人..我必须以某种方式滥用Android API?
以下是代码:
try {
String packageName = getPackageName();
int resID = getResources().getIdentifier( "filename" , "raw" , packageName ); //in res/raw folder I have filename.wav audio file
mp.setDataSource("android.resource://" + packageName + "/" + resID);
mp.prepare();
mp.start();
} catch (Exception e) {
Toast.makeText(PlayScreen.this, e.toString(), Toast.LENGTH_LONG).show();
}
我看到的吐司信息说:
java.io.IOException: Prepare failed.: status=0xFFFFFFFC
在eclipse logcat中我看到:
MediaPlayer Error (-4 -4)
非常感谢任何可以帮助解决这个问题的人...我只想玩我的wav文件!
答案 0 :(得分:1)
尝试使用FileDescriptor:
String packageName = getPackageName();
int resID = getResources().getIdentifier( "filename" , "raw" , packageName );
AssetFileDescriptor afd = getResources().openRawResourceFd(resId);
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
mp.start();
afd.close();
这就是我一直以来做的事情,这样做更安全,而不是硬编码路径。