簡體   English   中英

如何知道應用程序是否在前台?

[英]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()因為我的應用程序中有很多活動。 還有其他要知道應用程序是否在后台。

謝謝

這是上一個問題/答案。 它用於檢查背景,但您也可以輕松檢查前景。

檢查Android應用程序是否在后台運行

如果該應用程序不在后台,則我必須打開該應用程序,否則什么也不做。

使用LocalBroadcastManager - Link

onResume()中將活動注冊為廣播的接收者,並在onPause()注銷。

收到推送通知時發送廣播。 如果您的應用程序處於前台狀態,它將接收廣播並進行相應處理-否則,什么都沒有。

一種方法是創建一個標記以自己跟蹤前景狀態。 調用onPause()時,此標志設置為false;調用onResume()時,此標志設置為true。 正確設置標志后,您可以在活動的其余部分中使用它來確定您的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM