2015-07-10 72 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");可能只是會導致應用程序崩潰。