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

Его грохот еще потому игры является нулевым, когда вы приостановите его падение, так что добавьте 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, добавьте нулевую проверку.
Но даже если это не null, вы будет получить аварии в производстве, так как pause() разрешено вызывать только в {Started, Paused, PlaybackCompleted} состояниях, иначе это приведет к краху вашего приложения.

Когда звук воспроизводится, он находится в правильном состоянии для вашего onPause() { play.pause() }.

Посмотрите на мой ответ here для вспомогательной оболочки для MediaPlayer, которая может упростить проверку состояния.

0

Было бы лучше, если бы вы предоставили журнал ошибок. Тем не менее, может быть, я могу ответить на ваш вопрос:

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

В случае выше, если звук не воспроизводится, возможно, переменная игра может быть «пустой», то приложение попытается проверить второе выражение (play.isPlaying()), а потому, что игра равна нулю, она выкинет NullPointerException.

Когда звук воспроизводится, эти два выражения будут истинными, потому что воспроизведение не является нулевым, а звук воспроизводится, поэтому это может быть причиной того, что ваше приложение не падает при воспроизведении звука.

Я не знаю, был ли я достаточно ясным, но я надеюсь, что это поможет.

Cheers

Смежные вопросы