代码之家  ›  专栏  ›  技术社区  ›  Damn Vegetables

FirebaseMessagingService仅在后台显示通知

  •  1
  • Damn Vegetables  · 技术社区  · 7 年前

    FCM消息可以具有以下内容之一: data , notification 或者两者兼而有之。系统使用生成的通知 通知 缺少功能,所以我删除了 通知 并发送 只有因此,我必须自己创建通知。

    创建和显示通知很容易,但我不想在我的应用程序(特别是MainActivity,但无论如何它只有一个活动)已经在前台时显示通知。大多数应用程序在前台时不会显示通知。

    我怎么知道 onMessageReceived 如果我的应用程序不在前台?

    class MessagingService : FirebaseMessagingService()
    {
        override fun onMessageReceived(remoteMessage: RemoteMessage?)
        {
            // Check if message contains a data payload.
            if (remoteMessage?.data?.isNotEmpty() == true)
            {
                //Log.d(TAG, "Message data payload: " + remoteMessage.data)
    
                ......
    
                if "Only when my app is on the background or not running?"
                    sendNotification("Got a message.")
            }
        }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   kubs    7 年前
    /**
     * Method checks if the app is in background or not
     *
     * @param context Application context
     * @return True/False
     */
    public static boolean isAppIsInBackground(Context context) {
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
                }
            }
        } else {
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                isInBackground = false;
            }
        }
    
        return isInBackground;
    }