Intereting Posts
Полная сборка операционной системы Android для конкретной аппаратной цели Можно создать эту простую форму в Android XML? Идентификатор ресурса не найден для атрибута 'roundIcon' в пакете 'android' Создание различной компоновки для телефона и планшета Android. Могу ли я добавить функцию контроля взгляда, такую ​​как youtube в Android VR, без использования Unity? Как установить значение альфа-значения для drawable в StateListDrawable? Ведение списка ListView, в котором каждый элемент списка имеет отношение от одного до другого Начать действие с экрана предпочтений (намерение определено в файле xml) WebView показывает исходный html с loadDataWithBaseURL, а не визуализированный вид Как переименовать существующий пункт меню? Сопоставление пользователей из Google Checkout с ответами на лицензирование Android Использование onConfigurationChanged в фрагменте Android gotchas и извлеченные уроки Получать битмап-информацию из растрового изображения, хранящегося в папке с возможностью переноса Я получаю «Command Not Found», когда я пытаюсь запустить Android Emulator на Mac OS X

Android Notification PendingIntent Extras null

Я пытаюсь отправить информацию из уведомления на вызванную активность, а из моей активности я получил нуль.

Код для уведомления:

private void showNotification() { Intent resultIntent = new Intent(this, MainActivity.class); if (D) Log.d(TAG, "Id: " + Id); resultIntent.putExtra("ineedid", deviceId); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(MeterActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); // Bundle tmp = resultIntent.getExtras(); // if (tmp == null) { // Log.d(TAG, "tmp bundle is null"); // } else { // long id = tmp.getLong("ineedid", -1); // Log.d(TAG, "tmp id : " + id); // } NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( BLEMessengerService.this) .setSmallIcon(R.drawable.ic_action_search) .setContentTitle("Event tracker") .setContentText("Events received").setOngoing(true) .setContentIntent(resultPendingIntent) .setWhen(System.currentTimeMillis()); int mId = R.string.service_notification_start_service; mNM.notify(mId, mBuilder.getNotification()); } 

Код для получения информации от намерения в основной деятельности;

 Bundle extras = getIntent().getExtras(); if (extras != null) { long deviceID = getIntent().getLongExtra("ineedid", -1); if (ID == -1) { if (D) Log.i(TAG_D, "Wrong Id received."); finish(); } else { device = dataSource.getDeviceByID(deviceID); if (D) Log.i(TAG_D, "Get the id."); } } else { if (D) Log.d(TAG_D, "Bundle is null"); finish(); } 

Я проверял, прежде чем уведомление получит уведомление, пакет не равен null, и он имеет идентификатор в дополнительных целях. Хотя, когда я пытался извлечь его из намерения, он исчез. Помогите.

Solutions Collecting From Web of "Android Notification PendingIntent Extras null"

Для меня, помимо установки Intent.FLAG_ACTIVITY_SINGLE_TOP, мне пришлось добавить уникальное действие к цели:

  Intent resultIntent = new Intent(caller, NotificationActivity.class); String xId = getNextUniqueId(); resultIntent.putExtra("x_id", xId); resultIntent.setAction(xId); resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

.. без setAction (..), Extras имеет значение null в Intent, полученном моей NotificationActivity.

Это сообщение объясняет это: https://stackoverflow.com/a/3128271/2162226

В PendingIntent используйте этот флаг PendingIntent.FLAG_UPDATE_CURRENT это работа для меня

 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

Я получил ответ, добавьте строку: resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

ВНИМАНИЕ: если вы добавите его как resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); Это не сработает.

Я также пробовал другие флаги, такие как «FLAG_ACTIVITY_NEW_TASK» и «FLAG_ACTIVITY_RESET_TASK_IF_NEEDED». Здесь не работает.