Android обновляет активность из уведомлений - PullRequest
4 голосов
/ 26 июля 2011

У меня есть программа, в которой я вызываю уведомление.Уведомление, если вы его опускаете, запускает новое действие.

mNotificationManager = (NotificationManager) getSystemService(ns);

int icon = R.drawable.stat_sys_secure_green;
CharSequence tickerText = "Browser Security Enabled";
long when = System.currentTimeMillis();

notification = new Notification(icon, tickerText, when);

Context context = getApplicationContext();
CharSequence contentTitle = "Browser Security";
CharSequence contentText = "Security Vulnerability Detected";
Intent notificationIntent = new Intent(this, PrivacyMessage.class);

//Test Extra
notificationIntent.putExtra("Primary Key", "Primary Text");

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

mNotificationManager.notify(HELLO_ID, notification);

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

CharSequence contentTitle = "Browser Security";
CharSequence contentText = "Test New Notification";
Intent intent = new Intent(this, PrivacyMessage.class);
notification.icon = R.drawable.stat_sys_secure_orange;

intent.putExtra("Test Thing", "Test Value");
//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent cI = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(getApplicationContext(), "New Title", "NewText", cI);
mNotificationManager.notify(HELLO_ID, notification);

Теперь, когда я выполняю этот код, появляется новый заголовок уведомления, цвет значка меняется, и раскрывающийся список отражает новый заголовок и информацию о добавлении.Однако, когда я нажимаю на него, он не запускает действие с новым намерением.Вместо этого он просто вытаскивает старые действия со старыми дополнениями.Я пробовал и FLAG_ACTIVITY_CLEAR_TOP, и FLAG_ACTIVITY_NEW_TASK, но ни один из них не может очистить старую вторичную активность и создать новую.Есть идеи, как мне это сделать?

Ответы [ 3 ]

10 голосов
/ 29 июля 2011

Видимо, это на самом деле ошибка / особенность среды Android.Если функция pendingIntent () не передана с уникальным кодом запроса, она просто извлекает старое намерение, которое первоначально было передано с этим номером.

Подробности можно найти здесь: http://groups.google.com/group/android-developers/browse_thread/thread/ad855bb57042c2bd/e84c8d6fececf6e4?lnk=gst&q=notification#e84c8d6fececf6e4

Решение, которое онипридумал просто увеличивать requestCode при каждом вызове pendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags) и устанавливать флаги так, как я делал это изначально с

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

, что, похоже, не идеальное решение, нооно работает.Спасибо, ребята, за вашу помощь!

0 голосов
/ 29 июля 2011

Вы переопределяете onNewIntent (), чтобы перехватить новое намерение, или просто вызываете getIntent ()? В документации onNewIntent () говорится, что getIntent () будет продолжать возвращать исходное намерение, использованное для запуска действия, если вы не вызовите setIntent () из onNewIntent ().

0 голосов
/ 28 июля 2011

Я думаю, прежде всего, вы должны забыть о FLAG_ACTIVITY_NEW_TASK, потому что это откроет новую задачу (группу действий) без очистки чего-либо, что вы ранее открывали. FLAG_ACTIVITY_CLEAR_TOP также не будет полезен для вас, потому что, если я правильно понимаю сценарий, ваши такты имеют только два действия, а ваше целевое действие является вторичным.

Итак, вот мой вопрос ... Если второй фрагмент кода выполняется в контексте Activity, почему бы вам просто не вызвать startActivity с новыми дополнениями? Это позволит вам обрабатывать новые дополнения в методе onStart вторичного действия.

Привет.

...