2013-04-25 63 views
1

我對互聯網上播放廣播流這段代碼,這段代碼,如: -錯誤的流媒體在Android

package com.example.kam; 

import java.io.IOException; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

import android.media.AudioManager; 
import android.media.MediaPlayer; 


public class MainActivity extends Activity { 
    public MediaPlayer mp; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 
    protected void onResume(){ 
     super.onResume(); 

     mp = new MediaPlayer(); 
     try { 
      mp.setDataSource("http://radio.arabhosters.com:8015/"); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SecurityException 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(); 
     } 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     try { 
      mp.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } //also consider mp.prepareAsync(). 
     mp.start(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 

     return true; 
    } 

} 

當我運行這段代碼,我看到這個異常: -

04-25 14:11:16.448: E/MediaPlayer(533): Unable to to create media player 
04-25 14:11:16.458: W/System.err(533): java.io.IOException: setDataSource failed.: status=0x80000000 
04-25 14:11:16.458: W/System.err(533): at android.media.MediaPlayer.setDataSource(Native Method) 
04-25 14:11:16.458: W/System.err(533): at com.example.kam.MainActivity.onResume(MainActivity.java:26) 
04-25 14:11:16.468: W/System.err(533): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154) 
04-25 14:11:16.468: W/System.err(533): at android.app.Activity.performResume(Activity.java:4539) 
04-25 14:11:16.468: W/System.err(533): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2433) 
04-25 14:11:16.468: W/System.err(533): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2471) 
04-25 14:11:16.468: W/System.err(533): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985) 
04-25 14:11:16.478: W/System.err(533): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
04-25 14:11:16.478: W/System.err(533): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
04-25 14:11:16.478: W/System.err(533): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-25 14:11:16.478: W/System.err(533): at android.os.Looper.loop(Looper.java:137) 
04-25 14:11:16.478: W/System.err(533): at android.app.ActivityThread.main(ActivityThread.java:4340) 
04-25 14:11:16.478: W/System.err(533): at java.lang.reflect.Method.invokeNative(Native Method) 
04-25 14:11:16.489: W/System.err(533): at java.lang.reflect.Method.invoke(Method.java:511) 
04-25 14:11:16.489: W/System.err(533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-25 14:11:16.489: W/System.err(533): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-25 14:11:16.489: W/System.err(533): at dalvik.system.NativeStart.main(Native Method) 
04-25 14:11:16.489: E/MediaPlayer(533): prepareAsync called in state 1 
04-25 14:11:16.489: W/System.err(533): java.lang.IllegalStateException 
04-25 14:11:16.499: W/System.err(533): at android.media.MediaPlayer.prepare(Native Method) 
04-25 14:11:16.499: W/System.err(533): at com.example.kam.MainActivity.onResume(MainActivity.java:42) 
04-25 14:11:16.499: W/System.err(533): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154) 
04-25 14:11:16.499: W/System.err(533): at android.app.Activity.performResume(Activity.java:4539) 
04-25 14:11:16.499: W/System.err(533): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2433) 
04-25 14:11:16.499: W/System.err(533): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2471) 
04-25 14:11:16.509: W/System.err(533): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1985) 
04-25 14:11:16.509: W/System.err(533): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
04-25 14:11:16.509: W/System.err(533): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
04-25 14:11:16.509: W/System.err(533): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-25 14:11:16.509: W/System.err(533): at android.os.Looper.loop(Looper.java:137) 
04-25 14:11:16.509: W/System.err(533): at android.app.ActivityThread.main(ActivityThread.java:4340) 
04-25 14:11:16.509: W/System.err(533): at java.lang.reflect.Method.invokeNative(Native Method) 
04-25 14:11:16.509: W/System.err(533): at java.lang.reflect.Method.invoke(Method.java:511) 
04-25 14:11:16.519: W/System.err(533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-25 14:11:16.519: W/System.err(533): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-25 14:11:16.519: W/System.err(533): at dalvik.system.NativeStart.main(Native Method) 
04-25 14:11:16.519: E/MediaPlayer(533): start called in state 1 
04-25 14:11:16.519: E/MediaPlayer(533): error (-38, 0) 
04-25 14:11:16.669: D/gralloc_goldfish(533): Emulator without GPU emulation detected. 

但是我將這些代碼導入到另一臺PC上,它將毫無問題地播放。

在我的錯誤成立

+0

您是否在Manifest中設置了<使用權限android:name =「android.permission.INTERNET」/>'權限? – Pragnani 2013-04-25 16:17:34

+0

@Pragnani是的,我會將它添加到AndroidManifest.xml – k1gfx 2013-04-25 16:20:48

回答

1

我的猜測是,你永遠不會調用你的MediaPlayerrelease()。一個簡單的方法(至少如果我正確閱讀logcat)來解決您的問題將是在實例化之前放置一個reset()調用。就像這樣:雖然

mp.reset(); 
mp.setDataSource("http://radio.arabhosters.com:8015/"); 

一件事:你應該閱讀整個MediaPlayer state diagram要真正瞭解你應該做的事情。

+0

感謝您的解決方案 – k1gfx 2013-04-25 18:59:01

+0

不客氣! – DigCamara 2013-04-25 19:01:58