2013-10-14 47 views
1

我已經做了很多搜索,但沒有找到任何合適的答案。問題是這樣的:檢查Android應用程序是否在後臺?

假設我開始安卓項目有活動A,B,C和我需要捕捉事件當整個應用程序後主頁按下按鈕(無論活動)後臺。

當用戶再次啓動應用程序時,它從android維護的活動堆棧中恢復。這個活動我想抓住並顯示給用戶敬酒「你的應用程序現在是活躍的」。

當一個屏幕切換到另一個屏幕時,這個吐司顯示不可見,每當用戶再次回到應用程序時,它應該只有第一次可見。

回答

1

我在經過幾天的努力後發現了一些東西。希望它在某些情況下會有用。

/** 
* Checks if the application is being sent in the background (i.e behind 
* another application's Activity). 
* 
* @param context the context 
* @return <code>true</code> if another application will be above this one. 
*/ 
public static 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; 
} 

對於這個工作,你應該包括這在你的AndroidManifest.xml中

<uses-permission android:name="android.permission.GET_TASKS" /> 

更多細節。參考:android:how to check if application is running in background

+0

你好,正如你所說的你有3個活動A B C所以你在每一個活動中寫了這段代碼嗎? 還是有一個活動/類保持只要應用程序處於活動狀態 – 2014-04-24 15:01:51

+0

GET_TASKS在7.0 –

-1

當應用程序再次處於活動狀態時調用此方法。在那裏寫你的祝酒。

@Override 
public void onResume() { 

    super.onResume(); 

} 
+0

這將顯示它不僅在主頁按鈕後。 –

+0

是的,但我理解這樣的問題:他想在應用程序恢復時顯示敬酒。所以這是正確的方法。 –

+0

那麼,如果你只想檢查主頁按鈕,請檢查:http://nisha113a5.blogspot.nl/但它有點危險,因爲你的應用程序可能由於幾個原因而出現在後臺,所以最好的方法是檢查是使用活動生命週期http://developer.android.com/reference/android/app/Activity.html –

0

當按下Home鍵,的onStop方法被稱爲在activity.So您可以在sharedpreferences設置一個boolean那裏,也覆蓋的OnStart手動檢查,並把舉杯那裏,如果布爾值爲true 。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {  

    if(keyCode == KeyEvent.KEYCODE_HOME) 
    { 

     //set flag true in shared preferences 

    } 
}); 
+0

嘿Munish,試試這個,讓我知道.. –

+0

你有沒有嘗試過共享偏好,通過重寫onStop ()? –

+0

我已經嘗試過..但是根據我的要求,活動烤麪包之間的切換不應該是可見的,它應該只在應用再次進入活動狀態時纔可見。 onStop和onStart在切換活動時工作。 –

相關問題