2013-12-10 2 views
3

Я пытаюсь обнаружить приложение, когда оно идет в фоновом режиме. Все работает отлично, но в New Android Version 4.4(Kitkat) его не работает. Я не могу узнать, в чем проблема с Kitkat. Он всегда возвращает false.Как определить приложение, когда оно идет в фоновом режиме в Kitkat (4.4)?

public static boolean inBackground(final Context context) { 

    ActivityManager am = (ActivityManager) context 
      .getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      return true; 
     } 
    } 

    return false; 
} 
+0

, в каком методе вы это называете ?? –

+2

Вы прочитали [документацию] (http://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks%28int%29)? Возможно, вы столкнетесь с *, вероятно, сломаетесь в будущем *. – zapl

+0

@Kalyanpvs Я звоню в onPause() – moDev

ответ

2

Override Activity.onPause() или Activity.onStop(), в зависимости от того, какой уровень фона вы хотите.

2

У меня такая же проблема. Решение состоит в том, чтобы вызвать этот метод на onStop().

Чтобы упростить, я расширяю действия, в которых мне нужно определить, когда приложение переходит в фоновый режим ниже.

public abstract class MyActivity extends Activity { 

    @Override 
    public void onStop() { 

     super.onStop(); 

     if (isApplicationSentToBackground(this)){ 

      // handle app going into background here 
     } 
    } 

    private boolean isApplicationSentToBackground(final Context context) { 

     ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
     if (!tasks.isEmpty()) { 

      ComponentName topActivity = tasks.get(0).topActivity; 
      if (!topActivity.getPackageName().equals(context.getPackageName())) { 

       return true; 
      } 
     } 

     return false; 
    } 
} 
+0

Он работал над всем API, кроме Kitkat, но когда я проверил stat в onStop, он отлично работает. Спасибо –

+0

@ Tamawy вы можете объяснить? Этот ответ работает или нет в KitKat? Вы сказали, что он не работает в KitKat, тогда вы отправляете его отлично. – Fraggle

+0

@Fraggle использовать onStop(), и он будет работать в kitkat –

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