2016-08-24 40 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

当音频播放时,这两个表达式将为真,因为播放不为空并且音频正在播放,所以这可能是您的应用在播放音频时不会崩溃的原因。

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

干杯

相关问题