0

私はしばらくの間、この特定の問題に悩まされてきました。それは本当に単純であるべきものなので、面倒です..どうにかして 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ファイルを再生したいだけです!

4

1 に答える 1

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

それが私がいつもしていることであり、パスをハードコーディングするよりもそのようにする方が安全です。

于 2013-01-07T22:45:42.377 に答える