Android代码播放位于res / raw的.wav文件 - 奇怪的错误

时间:2013-01-07 22:34:52

标签: java android audio

我一直坚持这个特定的问题已经有一段时间了,这应该是非常简单的,所以它很烦人..我必须以某种方式滥用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文件!

1 个答案:

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

这就是我一直以来做的事情,这样做更安全,而不是硬编码路径。