Уведомление Android: не показывать уведомление, когда приложение открыто?

Я работаю над проектом и использую Intent Service с wakefulBroadcastReceiver для планирования будильника и отправки уведомления. Пока проблем нет. Но я хочу, чтобы, когда я открываю свое приложение, оно больше не отображало уведомление. Пожалуйста, любая идея для этой проблемы?


person Finn D    schedule 18.02.2017    source источник


Ответы (1)


В вашем приемнике уведомлений, когда вы получаете уведомление, вы можете проверить, находится ли приложение в фоновом режиме или нет, и принять решение о соответствующем отображении уведомления.

Вот код, чтобы проверить, находится ли приложение в фоновом режиме или нет.

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;
        }
}
person phoenix    schedule 18.02.2017
comment
Я вызываю метод выше внутри активности onCreate ?? @Г-н. Кролик - person Finn D; 18.02.2017
comment
да, вызов из активности, но опубликуйте это в классе приложения - person user3040153; 18.02.2017
comment
@FinnD Вам нужно вызвать этот метод внутри вашего приемника, а не в onCreate. Я отредактировал ответ, который показывает пример для приемника GCM, если вы используете его. - person phoenix; 18.02.2017