2016-10-22 50 views
-1

我試圖讓我的應用程序通過下面的代碼中使用的警報聲,但我得到一個IOException從資產文件夾播放MP3媒體播放器拋出異常

private void playSound() { 
    try { 
     AssetFileDescriptor afd = getAssets().openFd("sounds/alert.mp3"); 
     MediaPlayer mediaPlayer = new MediaPlayer(); 
     Log.d(TAG, "playSound: mediaplayer created...................."); 
     mediaPlayer.setDataSource(afd.getFileDescriptor()); 
     // MediaPlayer reads the file and gets ready to play 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

堆棧跟蹤如下

10-22 22:46:47.380 8612-8612/com.example.android.timer E/MediaPlayer: Unable to to create media player 
10-22 22:46:47.400 8612-8612/com.example.android.timer W/System.err: java.io.IOException: setDataSourceFD failed.: status=0x80000000 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at android.media.MediaPlayer.setDataSource(Native Method) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at com.example.android.timer.MainActivity.playSound(MainActivity.java:147) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at com.example.android.timer.MainActivity.access$000(MainActivity.java:23) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at com.example.android.timer.MainActivity$1.onPlayNotification(MainActivity.java:52) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at com.example.android.timer.MyTimer.run(MyTimer.java:113) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at android.os.Handler.handleCallback(Handler.java:615) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-22 22:46:47.430 8612-8612/com.example.android.timer W/System.err:  at android.os.Looper.loop(Looper.java:137) 
10-22 22:46:47.440 8612-8612/com.example.android.timer W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:4940) 
10-22 22:46:47.440 8612-8612/com.example.android.timer W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-22 22:46:47.440 8612-8612/com.example.android.timer W/System.err:  at java.lang.reflect.Method.invoke(Method.java:511) 
10-22 22:46:47.440 8612-8612/com.example.android.timer W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) 
10-22 22:46:47.440 8612-8612/com.example.android.timer W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) 
10-22 22:46:47.440 8612-8612/com.example.android.timer W/System.err:  at dalvik.system.NativeStart.main(Native Method) 

MainActivity.java:147哪裏的問題所在是該行

mediaPlayer.setDataSource(afd.getFileDescriptor()); 

我的MP3文件位於assets/sounds/alert.mp3,我可以看到在項目經理中,它用一個問號表示。有任何想法嗎?

回答

2

嘗試:

player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 

如果不工作,那麼您可以將您的MP3添加到原文件夾,然後:

MediaPlayer player = MediaPlayer.create(this, R.raw.mp3_file); 
0

那麼答案很簡單也說不定。具有以下

mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength()); 
0

更換

mediaPlayer.setDataSource(afd.getFileDescriptor()); 

請在res目錄中的文件夾原料,並把原文件夾,並參考所有MP3文件這樣R.raw.alert.mp3.Sure這種幫助的感謝