getIntent () Дополнительно всегда NULL

Я написал простое приложение для Android, которое показывает настраиваемое уведомление:

Context context = getApplicationContext(); NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification( R.drawable.icon, title, System.currentTimeMillis()); Intent notificationIntent = new Intent( context, this.getClass()); notificationIntent.putExtra("com.mysecure.lastpage", "SECURECODE"); PendingIntent pendingIntent = PendingIntent.getActivity( context , 0, notificationIntent, 0); notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT; notification.contentView = new RemoteViews(context.getPackageName(), R.layout.notifypbar); notification.contentIntent = pendingIntent; notification.contentView.setTextViewText(R.id.notifypb_status_text, text); notification.contentView.setProgressBar(R.id.notifypb_status_progress, 100, (int)(100*progress), false); manager.notify(104, notification); 

Этот fragment кода называется ТОЛЬКО ОДИН в моем приложении и отображает уведомление с индикатором выполнения (все правильно).

Теперь, когда пользователь нажимает на это уведомление, мое приложение обрабатывает событие onResume .

 public void onResume() { super.onResume(); // TODO: Extras è SEMPRE NULL!!! impossibile! Intent callingintent = getIntent(); Bundle extras = callingintent.getExtras(); 

но дополнительные функции всегда NULL!

Я пробовал любую комбинацию:

 notificationIntent.putExtra("com.mysecure.lastpage", "SECURECODE"); 

или

 Bundle extra = new Bundle(); extra.putString(key, value); notificationIntent.putExtra(extra); 

но getIntent (). getExtras () всегда возвращает NULL.

Это сценарий:
Метод getIntent() возвращает FIRST, чем запуск.

Таким образом, когда действие ЗАКРЫТО (завершено), и пользователь нажимает на уведомление, он запускает новый экземпляр активности, а getIntent() работает как ожидалось (Extras не равно null ).

Но если активность «спящая» (она находится в фоновом режиме), и пользователь нажимает на уведомление, getIntent() всегда возвращает самое ПЕРВЫЙ намерение, которое запустило действие, а НЕ – намерение уведомления.

Чтобы поймать намерение уведомления во время работы приложения, просто используйте это

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

и затем переопределить onNewIntent(Intent newintent) .

Поэтому, когда приложение запускается первым, getIntent() может использоваться, и когда приложение возобновляется со спящего onNewIntent работает onNewIntent .

Просто напишите этот код над вашим методом поиска (). Это все, что нужно. Это освежает намерения – я действительно не знаю, но это работает.

 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); } 

Проблема. Вы отправляете один и тот же код запроса для ожидающего усиления. Измените это.

Решение . Установите глобальную переменную int UNIQUE_INT_PER_CALL = 0 и когда вы создаете pendingIntent, как показано ниже.

  PendingIntent contentIntent = PendingIntent.getActivity(context, UNIQUE_INT_PER_CALL, notificationIntent, 0); 

UNIQUE_INT_PER_CALL ++; // для увеличения.

Поскольку, похоже, ваша активность уже запущена, я думаю, вам нужно указать FLAG_UPDATE_CURRENT , иначе getIntent() вернет предыдущий. См. Этот ответ .

Посмотрите на общие настройки для передачи и поиска постоянных пар ключ / значение.

  • Создание пользовательского уведомления, андроида
  • Android: удалить уведомление из панели уведомлений
  • Отмена уведомления об удалении приложения из многозадачной панели
  • Как использовать Notification.Builder
  • возобновление деятельности извещения
  • Уведомление Не показывать
  • android: запуск фоновой задачи с помощью AlarmManager
  • Отсутствие права на уведомление Push Push
  • Android Notification Sound
  • Несколько уведомлений о том же действии
  • Откройте приложение после нажатия кнопки «Уведомление»
  • Давайте будем гением компьютера.