2015-07-10 79 views
0

我想处理媒体播放器错误,当错误发生时,我想烤面包消息,然后播放下一首歌曲,但每当发生错误时它就会崩溃。优雅地处理媒体播放器错误

这里是代码我想

public class player1 extends ActionBarActivity implements View.OnClickListener,OnErrorListener{ 
    MediaPlayer mp; 
    ArrayList<File> mySongs; 
    int position; 
    Uri u; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_player); 

     Intent i = getIntent(); 
     Bundle b = i.getExtras(); 
     mySongs = (ArrayList) b.getParcelableArrayList("songlist"); 
     position = b.getInt("pos", 0); 
     u = Uri.parse(Uri.encode(mySongs.get(position).toString())); 
     mp = MediaPlayer.create(getApplicationContext(), u); 
     mp.start(); 


    } 

    @Override 
    public boolean onError(MediaPlayer mp, int what, int extra) { 
     String errorWhat; 
     switch(what){ 
      case MediaPlayer.MEDIA_ERROR_UNKNOWN: 
       errorWhat = "MEDIA_ERROR_UNKNOWN"; 
       break; 
      case MediaPlayer.MEDIA_ERROR_SERVER_DIED: 
       errorWhat = "MEDIA_ERROR_SERVER_DIED"; 
       break; 
      default: 
       errorWhat = "!"; 
     } 

     String errorExtra; 
     switch(extra){ 
      case MediaPlayer.MEDIA_ERROR_IO: 
       errorExtra = "MEDIA_ERROR_IO"; 
       break; 
      case MediaPlayer.MEDIA_ERROR_MALFORMED: 
       errorExtra = "MEDIA_ERROR_MALFORMED"; 
       break; 
      case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: 
       errorExtra = "MEDIA_ERROR_UNSUPPORTED"; 
       break; 
      case MediaPlayer.MEDIA_ERROR_TIMED_OUT: 
       errorExtra = "MEDIA_ERROR_TIMED_OUT"; 
       break; 
      default: 
       errorExtra = "!"; 
     } 

     Toast.makeText(player1.this, 
       "Error" + "\n" 
         + errorWhat + "\n" 
         + errorExtra, 
         Toast.LENGTH_LONG).show(); 

     //release 
     mp.stop(); 
     mp.release(); 
     initMediaPlayer(); 

     return true; 

    }; 

    private void initMediaPlayer() { 
     Toast.makeText(player1.this, 
      "playomng next song", 
      Toast.LENGTH_LONG).show(); 
     position = (position + 1)%mySongs.size(); 
     u = Uri.parse(Uri.encode(mySongs.get(position).toString())); 
     mp = MediaPlayer.create(getApplicationContext(), u); 
     mp.start(); 
    } 
} 

如何管理而不强制媒体播放器来关闭处理这些错误?

+0

由于您的代码崩溃,请发布crashtraptrace以帮助查找问题。 – Aster

回答

0

与其仅仅在您的代码中添加乐队帮助,可能会更明智地找到实际问题所在。如果你能找到什么线(S)您收到一个错误,你可以简单地换行代码在

try{ 
    //code that crashes here 
} 

catch(Exception e){ 
    Toast.makeText(context, "Media error", LENGTH_SHORT).show(); 
} 

编辑: 注意,简单地防止崩溃通过一个try/catch可能会导致错误本身。如果你可以发布你的logcat,我们可能会弄清楚你的实际错误是什么。

0
  • 没有logcat的,我们不能说太多,但你没有设置 播放器收听错误mp.setOnErrorListener(this);
  • 我认为你的崩溃可能是i.getExtras();它可以为空,因此调用b.getParcelableArrayList("songlist");可能只是会导致应用程序崩溃。