Android PendingIntent отнесет вас к уже существующей деятельности?
Не уверен, как искать это...
У меня есть следующее, которое вызывается всякий раз, когда задание добавляется или удаляется из моей очереди, чтобы отправить уведомление в строку состояния:
private void showNotification()
{
int jobsize = mJobQueue.size();
int icon = (jobsize == 0) ?
android.R.drawable.stat_sys_upload_done :
android.R.drawable.stat_sys_upload;
Notification notification =
new Notification(icon, "Test", System.currentTimeMillis());
Intent intent = new Intent(this, FileManagerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
notification.flags =
(Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL);
notification.setLatestEventInfo(this,
"Uploading to our servers",
getString((jobsize > 0) ?
R.string.notification_active_transfers :
R.string.notification_no_transfers),
pendingIntent);
mNotifyManager.notify(NOTIFICATION, notification);
}
Как сейчас, это поведение:
-
если пользователь выходит из системы и обращается к уведомлению, он все равно откроет новую FileManagerActivity (ops!), я мог бы обойти это, начиная с моей активности аутентификации и передавая намерение в мой стек в естественном порядке, его когда приложение уже работает, я испытываю трудности.
-
если пользователь уже открыл FileManagerActivity, щелкнув уведомление, будет добавлен второй экземпляр. В этом случае я хочу, чтобы текущий исполняемый файл FileManagerActivity получал фокус вместо запуска нового экземпляра.
Как я могу получить правильное поведение?
Ответы
Ответ 1
Я сделал это раньше, установив Activity для использования режим запуска "singleTop" в манифесте приложений. Он достигнет желаемой функции, используя существующую деятельность, если таковая существует. В этом случае onNewIntent будет вызываться в вашей активности.
Вам нужно будет проверить свой FileManagerActivity для аутентификации и приступить к новому действию, если это не произойдет, если пользователь не выполнил вход.
Ответ 2
Я думаю, что работал, когда добавил:
intent.setAction(Long.toString(System.currentTimeMillis()));
PendingIntent.FLAG_UPDATE_CUR
Intent intent = new Intent(context, MyOwnActivity.class);
intent.putExtra("foo_bar_extra_key", "foo_bar_extra_value");
intent.setAction(Long.toString(System.currentTimeMillis()));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent,PendingIntent.FLAG_UPDATE_CURRENT);