[英]How to know if the application is in foreground?
我已經在我的應用程序中實現了推送通知。 當我收到消息時,我必須檢查該應用程序是否在后台,因為如果該應用程序不在后台,我必須打開該應用程序,否則什么也不做。
我一直在使用下面的代碼,但這不起作用。
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;
}
我也使用了以下權限。
<uses-permission android:name="android.permission.GET_TASKS" />
但是上面的代碼不起作用。 我無法使用OnStart()
和OnDestroy()
因為我的應用程序中有很多活動。 還有其他要知道應用程序是否在后台。
謝謝
這是上一個問題/答案。 它用於檢查背景,但您也可以輕松檢查前景。
如果該應用程序不在后台,則我必須打開該應用程序,否則什么也不做。
使用LocalBroadcastManager
- Link 。
在onResume()
中將活動注冊為廣播的接收者,並在onPause()
注銷。
收到推送通知時發送廣播。 如果您的應用程序處於前台狀態,它將接收廣播並進行相應處理-否則,什么都沒有。
一種方法是創建一個標記以自己跟蹤前景狀態。 調用onPause()時,此標志設置為false;調用onResume()時,此標志設置為true。 正確設置標志后,您可以在活動的其余部分中使用它來確定您的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.