Android PendingIntent приведет вас к уже существующему действию? - PullRequest
24 голосов
/ 29 марта 2011

Не был уверен, как искать это ...

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

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!), Которую я мог бы обойти, начав с моей аутентификации и передавая намерение до моего стека в естественном порядке, Когда приложение уже запущено, у меня возникают трудности.

  • , если у пользователя уже есть открытая функция FileManager, щелкнув уведомление, будет помещен второй экземпляр поверх него. В этом случае я хочу, чтобы запущенный в данный момент FileManagerActivity получил фокус вместо запуска нового экземпляра.

Как я могу получить правильное поведение?

Ответы [ 2 ]

36 голосов
/ 29 марта 2011

Я делал это раньше, настроив Активность на использование режима запуска 'singleTop' в Манифесте приложения. Он достигнет желаемой функции, используя существующую деятельность, если она существует. В этом случае onNewIntent будет вызываться в вашей активности.

Вам нужно будет проверить свою FileManagerActivity для аутентификации и начать новое действие соответствующим образом, если пользователь не вошел в систему.

1 голос
/ 22 января 2014

Я думаю, сработало, когда добавил эти:

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);
...