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

4 回答 4

0

问题出在onPause()方法上。您需要play在暂停之前检查是否正在播放,onBackPressed() 并且最好检查 null 以避免崩溃

于 2016-08-24T12:48:32.540 回答
0

它崩溃是因为当你暂停它崩溃时播放为空,所以在调用暂停状态之前添加 chcek。

更改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();
}
于 2016-08-24T12:51:32.947 回答
0

Media框架是一个非常严格的状态机,处理各种不同的状态真的很麻烦。

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

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

在这里查看我的答案,了解 MediaPlayer 的辅助包装器,它可以简化状态检查。

于 2016-08-24T12:53:56.873 回答
0

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

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

在上面的 if 中,当音频没有播放时,变量 play 可能为“null”,然后应用程序将尝试验证第二个表达式 ( play.isPlaying()),因为 play 为 null,它会抛出一个NullPointerException.

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

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

干杯

于 2016-08-24T12:54:42.033 回答