Я могу найти способ отправить параметры моей деятельности из моего уведомления.
У меня есть сервис, который создает уведомления. Когда пользователь нажимает на уведомление, я хочу открыть свою основную деятельность с некоторыми специальными параметрами. Например, идентификатор элемента, чтобы моя деятельность могла загрузить и представить специальный подробный вид элемента. Более конкретно, я загружаю файл, и когда файл загружается, я хочу, чтобы уведомление имело намерение, чтобы при нажатии оно открывало мою активность в специальном режиме. Я пытался использовать putExtra
свое намерение, но, кажется, не могу извлечь его, поэтому я думаю, что я делаю это неправильно.
Код из моего сервиса, который создает Уведомление:
// construct the Notification object.
final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, tickerText);
contentView.setProgressBar(R.id.progress,100,0, false);
notif.contentView = contentView;
Intent notificationIntent = new Intent(context, Main.class);
notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notif.contentIntent = contentIntent;
nm.notify(id, notif);
Код из моего Activity, который пытается получить дополнительный параметр из уведомления:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null){
Log.i( "dd","Extra:" + extras.getString("item_id") );
}
Дополнения всегда нулевые, и я никогда ничего не получаю в свой журнал.
Кстати ... onCreate
запускается только тогда, когда моя активность начинается, если моя активность уже началась, я также хочу собрать дополнительные данные и представить свою активность в соответствии с item_id, который я получаю.
Любые идеи?
источник
PendingIntent.getActivity()
с флагомPendingIntent.FLAG_UPDATE_CURRENT
, в противном случае одни и те же статистические данные будут повторно использоваться для каждого уведомления.PendingIntent.getActivity()
в дополнение к настройкамFLAG_ACTIVITY_SINGLE_TOP
наIntent
иFLAG_UPDATE_CURRENT
наPendingIntent
. См stackoverflow.com/questions/7370324/...У меня была похожая проблема, мое приложение отображает уведомления о сообщениях. Когда есть несколько уведомлений и щелкает каждое уведомление, он отображает эту деталь уведомления в просмотре сообщения. Я решил проблему с тем же дополнительным параметром, полученным с учетом намерения сообщения.
Вот код, который это исправил. Код для создания уведомления о намерениях.
Код для просмотра сообщения Активность.
источник
Может быть немного поздно, но: вместо этого:
Использовать это:
источник
Встреча та же проблема здесь. Я разрешаю его, используя другой код запроса, используя тот же идентификатор, что и уведомление, при создании PendingIntent. но до сих пор не знаю, почему это должно быть сделано.
источник
Прочитав некоторые списки адресов электронной почты и другие форумы, я обнаружил, что уловка, кажется, добавляет некоторые уникальные данные к цели.
как это:
Я не понимаю, почему это нужно делать, Это связано с тем, что намерение не может быть идентифицировано только по его дополнениям ...
источник
Я перепробовал все, но ничего не получалось.
в итоге придумали следующее решение.
1- в манифест добавить для активности Android: launchMode = "singleTop"
2 - делая отложенное намерение, сделайте следующее, используйте bundle вместо непосредственного использования intent.putString () или intent.putInt ()
источник
AndroidManifest.xml
Включить launchMode = "singleTop"
SMSReceiver.java
Установите флаги для Intent и PendingIntent
MessageDetailsActivity.java
onResume () - вызывается каждый раз, загружает дополнения.
Надеюсь, это поможет, это было основано на других ответах здесь на stackoverflow, но это наиболее обновленный, который работал для меня.
источник
Это просто, это мое решение с использованием объектов!
МОЙ ПОЖО
Метод уведомления
Новая активность
Удачи!!
источник
После некоторого поиска я получил решение от руководства разработчика Android
Чтобы получить дополнительное значение Intent в классе Test Activity, вам нужно написать следующий код:
источник
stackBuilder
?В своей реализации уведомлений используйте код, подобный следующему:
Чтобы получить Intent дополнительные значения в ExampleActivity, используйте следующий код:
ОЧЕНЬ ВАЖНОЕ ПРИМЕЧАНИЕ: метод Intent :: putExtra () перегружен . Чтобы получить дополнительный ключ, вам нужно использовать метод Intent :: get [Type] Extra () .
Примечание: NOTIFICATION_ID и NOTIFICATION_CHANNEL_ID являются константами, объявленными в ExampleActivity
источник
Я тоже могу сказать, что перепробовал все, что упоминалось в этих постах, и еще несколько из других. Проблема № 1 для меня заключалась в том, что новый Intent всегда имел нулевой пакет. Моя проблема заключалась в том, чтобы сосредоточиться слишком много на деталях «я включил .this или .that». Мое решение состояло в том, чтобы сделать шаг назад от деталей и рассмотреть общую структуру уведомления. Когда я сделал это, мне удалось разместить ключевые части кода в правильной последовательности. Итак, если у вас возникли похожие проблемы, проверьте:
// Мне больше нравится указывать тип данных. например, bundle.putInt
С этой последовательностью я получаю правильный пакет.
источник
Если вы используете
в файле AndroidManifest.xml для запуска действия необходимо использовать следующее в своем намерении:
Важно установить уникальные данные, например, используя уникальный идентификатор, например:
источник
Пожалуйста, используйте как PendingIntent при отображении уведомления, чем оно будет разрешено.
PendingIntent intent = PendingIntent.getActivity (this, 0 ,tificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Добавьте PendingIntent.FLAG_UPDATE_CURRENT в качестве последнего поля.
источник