Reputation: 2702
I am developing an Android media player streaming application. I get the following exception:
12-11 11:12:06.298: INFO/StagefrightPlayer(34): setDataSource('10.0.2.2\a.mp3')
12-11 11:12:06.308: DEBUG/mp(618): starting
12-11 11:12:06.308: ERROR/MediaPlayer(618): start called in state 4
12-11 11:12:06.308: ERROR/MediaPlayer(618): error (-38, 0)
12-11 11:12:06.328: ERROR/MediaPlayer(618): error (1, -2147483648)
12-11 11:12:06.328: ERROR/MediaPlayer(618): Error (-38,0)
12-11 11:12:06.409: ERROR/MediaPlayer(618): Error (1,-2147483648)
String url = "10.0.2.2\\a.mp3"; // your URL here MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(url); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { mediaPlayer.prepareAsync(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("mp","starting"); mediaPlayer.start();
When using mediaPlayer.prepare
I get the following error message:
12-11 12:08:42.367: ERROR/MediaPlayer(980): error (1, -2147483648)
12-11 12:08:42.367: WARN/System.err(980): java.io.IOException: Prepare failed.: status=0x1
12-11 12:08:42.378: WARN/System.err(980): at android.media.MediaPlayer.prepare(Native Method)
12-11 12:08:42.378: WARN/System.err(980): at mobiledo.pjct.Voicesms.onCreate(Voicesms.java:52)
12-11 12:08:42.387: WARN/System.err(980): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-11 12:08:42.387: WARN/System.err(980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-11 12:08:42.387: WARN/System.err(980): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-11 12:08:42.387: WARN/System.err(980): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-11 12:08:42.387: WARN/System.err(980): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-11 12:08:42.387: WARN/System.err(980): at android.os.Handler.dispatchMessage(Handler.java:99)
12-11 12:08:42.418: WARN/System.err(980): at android.os.Looper.loop(Looper.java:123)
12-11 12:08:42.418: WARN/System.err(980): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-11 12:08:42.418: WARN/System.err(980): at java.lang.reflect.Method.invokeNative(Native Method)
12-11 12:08:42.418: WARN/System.err(980): at java.lang.reflect.Method.invoke(Method.java:507)
12-11 12:08:42.418: WARN/System.err(980): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-11 12:08:42.418: WARN/System.err(980): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-11 12:08:42.418: WARN/System.err(980): at dalvik.system.NativeStart.main(Native Method)
Upvotes: 0
Views: 6173
Reputation: 7879
calling .prepareAsync()
moves the player to Preparing state, not Prepared state. So either call .prepare
instead, or implement and register an OnPreparedListener
which then calls start()
Upvotes: 1
Reputation: 137272
You prepare the MediaPlayer instance asynchronously, but you call start
right after that, this causes the exception since the MediaPlayer is not ready. You should register a OnPreparedListener
(before you call prepareAsync
) and in this listener call start()
:
mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mediaPlayer.prepareAsync();
Upvotes: 3