Intereting Posts
Ionic android build Error – Не удалось найти переменную окружения ANDROID_HOME Сохранять качество изображения при декодировании потока в android Записывать приложения на C или C ++ для Android? EditText – изменение текста при наборе текста Как использовать или обходной путь searchManager.getSearchableInfo () в Android API 7? Как заменить значок гамбургера, который используется для ActionBarToggle на панели инструментов Android, с пользовательской возможностью рисования? Отправка сообщений OSC (open sound control) из приложения Android Как удалить всплывающий текст всплывающего окна Android в процессе поиска? Граница для кнопки в Android Что лучше: Parse или AWS Android API 21 – просмотр нижнего колонтитула IndexOutOfBoundsException Прямоугольная форма с двумя сплошными цветами Camerainfo.orientation дает неправильный ответ Android AlarmManager иногда опаздывает Android GCM: другой способ обработки push в зависимости от того, видимо ли приложение или нет

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 откроется.

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

Использование 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.