2013-12-10 54 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

您是否閱讀過[documentation](http://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks%28int%29)?您可能會遇到*「未來可能會中斷」*部分。 – zapl

+0

@Kalyanpvs我打電話在onPause() – moDev

回答

2

覆蓋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

它正在除了Kitkat之外的所有API,但是當我在onStop中檢查stat時它工作正常。謝謝 –

+0

@Tamawy你能解釋一下嗎?這個答案在KitKat中是否有效?你說它不適用於KitKat,那麼你發送它的工作正常。 – Fraggle

+0

@Fraggle使用onStop(),它將在kitkat中工作 –