Notification Android : Don't show notification when app is open?

后端 未结 1 911
伪装坚强ぢ
伪装坚强ぢ 2020-12-22 04:14

I\'m working on a project and I use Intent Service with wakefulBroadcastReceiver to schedule alarm and send notification. There are no problems this far. But I want when I o

相关标签:
1条回答
  • 2020-12-22 04:42

    In your notification receiver when you receive the notification you can check whether the app is in background or not and take a decision of showing the notification accordingly.

    Here's a code to check whether the app is in background or not.

    public class MyGcmPushReceiver extends GcmListenerService {
    
        /**
         * Called when message is received.
         * @param from   SenderID of the sender.
         * @param bundle Data bundle containing message data as key/value pairs.
         *               For Set of keys use data.keySet().
         */
        @Override
        public void onMessageReceived(String from, Bundle bundle) {
            // Check here whether the app is in background or running.
            if(isAppIsInBackground(getApplicationContext())) {
                // Show the notification
            } else {
                // Don't show notification
            }
        }
    
            /**
            * Method checks if the app is in background or not
            */
            private 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;
            }
    }
    
    0 讨论(0)
提交回复
热议问题