如果在没有播放音频的情况下按下主页按钮,则应用程序崩溃

时间:2016-08-24 12:46:41

标签: android audio android-mediaplayer activity-manager

如果我按主页按钮而不播放音频。该应用程序崩溃,但是当我播放音频并按下主页按钮时,它可以正常工作。 这是我的代码:

@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();
}

4 个答案:

答案 0 :(得分:0)

问题出在onPause()方法中。 您需要检查play是否正在播放,然后暂停播放,就像您在onBackPressed()中所做的那样 并且最好还检查null以避免崩溃

答案 1 :(得分:0)

  

当你暂停崩溃时,它崩溃因为播放是空的,所以添加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();
}

答案 2 :(得分:0)

媒体框架是一个非常严格的state machine,处理所有不同的状态真的很麻烦。

如果问题是NullPointerException,请添加空检查 但即使它不为空,你在生产中崩溃,因为pause()只允许在{Started, Paused, PlaybackCompleted}个状态中被调用,否则它会崩溃你的应用。

播放音频时,onPause() { play.pause() }处于正确的状态。

查看我的答案here,获取MediaPlayer的帮助包装器,这可以简化状态检查。

答案 3 :(得分:0)

如果您提供错误日志会更好。但是,也许我可以回答你的问题:

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

在上面的if中,当音频没有播放时,也许变量播放可能是&#34; null&#34;然后应用程序将尝试验证第二个表达式(play.isPlaying())并且因为播放为null,它将抛出NullPointerException

当音频正在播放时,这两个表达式都是正确的,因为播放不是空并且音频正在播放,所以这可能就是为什么你的应用在播放音频时不会崩溃的原因。

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

干杯