2016-08-24 41 views
0

如果我按下主頁按鈕而未播放音頻。該應用程序崩潰,但是當我播放音頻並按下主頁按鈕時,它可以正常工作。 這裏是我的代碼:如果在沒有播放音頻的情況下按下主頁按鈕,則應用程序崩潰

@Override 
protected void onPause() 
{ 
    Context context = getApplicationContext(); 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    if (!taskInfo.isEmpty()) { 
     ComponentName topActivity = taskInfo.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      play.pause(); 
      but19.setBackgroundResource(R.drawable.play); 
     } 
    } 
    super.onPause(); 
} 
@Override 
public void onBackPressed(){ 
    if(play!=null && (play.isPlaying())){ 
     if(play.isPlaying()) 
      play.stop(); 
     play.release(); 
    } 
    super.onBackPressed(); 
} 
+1

添加您的崩潰日誌。 –

回答

0

它的崩潰becasue玩的就是當你暫停崩潰所以加chcek空在調用pasue狀態之前調用 。

變化play.pause();

if(play!=null && play.isPlaying()){ play.pause(); }

完整代碼:

@Override 
protected void onPause() 
{ 
    Context context = getApplicationContext(); 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    if (!taskInfo.isEmpty()) { 
     ComponentName topActivity = taskInfo.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      if(play!=null && play.isPlaying()){ 
       play.pause(); 
      } 
      but19.setBackgroundResource(R.drawable.play); 
     } 
    } 
    super.onPause(); 
} 
+0

完美的作品....謝謝 – Devk

0

問題是onPause()方法。 你需要檢查,如果play被暫停它就像你在onBackPressed() 以前那樣玩,最好是檢查空也避免了崩潰

0

媒體框架是一個非常嚴格的state machine,這真的很麻煩來處理所有的不同狀態。

如果問題是NullPointerException,請添加空檢查。
但即使它不爲空,你得到崩潰的生產,因爲pause()被允許只在{Started, Paused, PlaybackCompleted}狀態被調用,否則它會崩潰你的應用程序。

當音頻播放時,它處於您的onPause() { play.pause() }的正確狀態。

看看我的回答here爲MediaPlayer的助手包裝,它可以簡化狀態檢查。

0

如果您提供錯誤日誌會更好。不過,也許我可以回答你的問題:

if(play!=null && (play.isPlaying())) 

在如上述,當音頻是不是在玩,或許變量戲可能是「空」,那麼應用程序將嘗試驗證第二個表達式(play.isPlaying() ),因爲遊戲是空的,它會拋出一個NullPointerException

當音頻播放時,這兩個表達式將爲真,因爲播放不爲空並且音頻正在播放,所以這可能是您的應用在播放音頻時不會崩潰的原因。

我不知道我是否足夠清楚,但我希望它有幫助。

乾杯

相關問題