2012-01-17 3 views
1

У меня есть массив со всем идентификатором ресурса локального ресурса (аудиофайлы). Я пытаюсь воспроизвести все эти файлы один за другим. Для этой цели я играю следующий файл на setOnCompletionListener случае Media Player, как показано ниже: -Исключение с воспроизведением аудиофайла

mMediaPlayer.setOnCompletionListener(); 

Полный код для непрерывно воспроизведении файлов, как показано ниже: -

Код

private void playing(){ 
    MediaPlayer mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer = MediaPlayer.create(this, Constants.mAudioIds[play]); // next file will be played 
    mMediaPlayer.start(); 
    mMediaPlayer.setOnCompletionListener(new OnCompletionListener(){ 
     @Override 
    public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
     play +=1; 
     playing(); 
    } 

    }); 
} 

Если я играю все файлы по отдельности, они отлично играют. Но, используя вышеприведенный код, я получаю ошибку в MediaPlayer. Ниже показана трассировка стека.

StackTrace

01-17 20:52:10.088: INFO/MediaPlayer(379): Info (1,44) 
01-17 20:52:10.358: DEBUG/dalvikvm(215): GC freed 43 objects/2096 bytes in 108ms 
01-17 20:52:15.368: WARN/MediaPlayer(379): info/warning (1, 26) 
01-17 20:52:15.410: ERROR/PlayerDriver(31): Command PLAYER_PREPARE completed with an error or info PVMFErrResource 
01-17 20:52:15.419: ERROR/MediaPlayer(379): error (1, -17) 
01-17 20:52:15.462: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete 
01-17 20:52:15.568: DEBUG/MediaPlayer(379): create failed: 
01-17 20:52:15.568: DEBUG/MediaPlayer(379): java.io.IOException: Prepare failed.: status=0x1 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at android.media.MediaPlayer.prepare(Native Method) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at android.media.MediaPlayer.create(MediaPlayer.java:644) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at com.media.sample.ui.AutoPlay.playing(AutoPlay.java:162) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at com.media.sample.ui.AutoPlay.access$0(AutoPlay.java:138) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at com.media.sample.ui.AutoPlay$1.onCompletion(AutoPlay.java:171) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1157) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at android.os.Looper.loop(Looper.java:123) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
01-17 20:52:15.568: DEBUG/MediaPlayer(379):  at dalvik.system.NativeStart.main(Native Method) 

Кроме того, тот же код прекрасно работает в очень немногих устройств (но в большинстве устройств + эмулятор) это дает выше исключение.

Пожалуйста, предоставьте некоторое решение для этого же.

+1

Я думаю, что это может быть хорошим ответом для вашего дела: http://stackoverflow.com/questions/3667782/android-media-player-fails-mp3-with-pvmferrnotsupported – Zappescu

+1

Проблема должна исходить из отсутствия подготовки(). http://developer.android.com/reference/android/media/MediaPlayer.html#prepare%28%29 –

ответ

0

Вам нужно проконсультироваться с диаграммой состояния и диаграммой, которая описывает состояния, в которых может находиться медиапланер, и какие методы можно вызвать в каком состоянии. http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States

Из-за этого медиаплеер может быть немного сложным.

0

Вам нужно позвонить prepareAsync() как:

private void playing(){ 
    MediaPlayer mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer = MediaPlayer.create(this, Constants.mAudioIds[play]); 
    mMediaPlayer.prepareAsync(); 

    mMediaPlayer.setOnCompletionListener(new OnCompletionListener(){ 
     @Override 
    public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
     play +=1; 
     playing(); 
    } 

    }); 
} 

@Override 
public void onPrepared(MediaPlayer mp) { 
    Log.d(TAG, "Stream is prepared"); 
    mp.start(); 
} 

Complete example is here.

Смежные вопросы