Push-уведомление при запуске приложения

Я внедряю push-уведомление, и пока он работает нормально. Мне удается получить push-уведомление и когда я нажимаю на то, что может начать работу.

Но я не хочу уведомлять пользователя об уведомлении, если приложение уже запущено. Это как я планирую это сделать … но не уверен, что это правильный путь

Intent actIntent = new Intent(this, MainActivity.class); actIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pIntent = PendingIntent.getActivity(this, 0, actIntent, 0); if (!isActivityRunning()) mNotificationManager.notify(0, notification); public boolean isActivityRunning(Context ctx) { ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE); for (RunningTaskInfo task : tasks) { if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) return true; } return false; } 

Функция isActivityRunning будет в основном проверять, работает ли MainActivity или нет. Если он находится в рабочем состоянии, он не будет отображать уведомление и будет передавать информацию самому действию для обновления интерфейса. Если активность не запущена при нажатии уведомления, MainActivity откроется.

Правильно ли это достигается?

Solutions Collecting From Web of "Push-уведомление при запуске приложения"

Использование activity manager не работает должным образом. Менеджер активности отслеживает все запущенные приложения на телефоне. На самом деле это не говорит вам, находится ли приложение на foreground или на background . Чтобы проверить, выполняется ли действие, задайте логическое значение в onResume и onPause .

Пример:

  public void onResume() { super.onResume(); isActivityRunning = true; } public void onPause() { super.onPause(); isActivityRunning = false; } 

Затем вы можете использовать isActivityRunning, чтобы узнать, хотите ли вы отправить уведомление или нет.

Также см. Следующее : Проверка, работает ли приложение Android в фоновом режиме

Я использую этот код, чтобы узнать, работает ли приложение:

  private boolean isActivityRunning() { if (MainActivity.getInstance() != null) { return true; } else { return false; } } 

И в MainActivity

  public static MainActivity getInstance() { return mInstance; } 

In onCreate Я назначаю mInstance:

 mInstance = this; 

В onDestroy:

 mInstance = null; 

Я использую проверку mInstance, потому что я использую его в разных действиях для проверки или для использования некоторых методов из MainActivity, поэтому для меня нет необходимости создавать новый логический var.