Как определить, открыто ли приложение Android из сообщения "Уведомление"?

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

В процессе запуска, как определить, открыто ли приложение от него?

и лучше. Как получить идентификатор уведомления по методу OnCreate()?

Обновить: из @Ovidiu - вот мой код putExtra, чтобы нажать

       Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
       notification.contentView = contentView;

       Intent notificationIntent = new Intent(this, Startup.class);
       notificationIntent.putExtra("JOBID", jobId);

       PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);

       notification.flags = Notification.FLAG_AUTO_CANCEL;
       notification.contentIntent = contentIntent;


       mNotificationManager.notify(jobId, notification);

а в главной операции "Startup.java" код

    Intent intent = this.getIntent();
    if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey("JOBID")) {
        int jobID = this.getIntent().getExtras().getInt("JOBID");

        if (jobID > 0) {

        }
    }

intent.getExtras() всегда возвращает null. Оказывается, мне нужно передать PendingIntent.FLAG_ONE_SHOT. Теперь он прошел!

Ответы

Ответ 1

Вам нужно использовать putExtra(ID_KEY,id) при создании Intent для запуска приложения, а в вашем методе onCreate() вы можете использовать getIntent().getExtras().getInt(ID_KEY); для получения вашего пройденного id integer.

Ответ 2

Код начальной активности будет выглядеть так: иначе, как только это произойдет из уведомления GCM, с тех пор всякий раз, когда Activity происходит из списка Recent, он скажет, что это происходит из уведомления GCM, что неверно.

Intent intent = this.getIntent();
if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey("JOBID") && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
    int jobID = this.getIntent().getExtras().getInt("JOBID");

    if (jobID > 0) {

    }
}

Ответ 3

У меня была такая же проблема, и я не понимаю, почему я должен использовать метод putExtra... Итак, я решил так: когда вы получаете уведомление и нажимаете на него, приложение открывается (обычно это открывает главное приложение деятельность), а в дополнениях вы можете найти некоторую информацию об этом уведомлении. Вы можете добавить параметры ключ/значение к уведомлениям, отправляемым на зарегистрированные устройства. Эти параметры будут добавлены в дополнение к цели.

Таким образом, вы можете действовать так: в вашем уведомлении добавьте параметр, который представляет ваш идентификатор уведомления.

Например, "messageId" → "abc", где abc - ваш идентификатор уведомления.

Затем в своей основной деятельности вы можете выполнять:

if (getIntent().getExtras().keySet().contains("messageId")) {
    // you opened the app from a notification
    String messageId = getIntent().getStringExtra("messageId");
    // do domething...
} else {
    // you opened the app normally
    // do domething...
}

И вы получите идентификатор уведомления. Таким образом, вы можете использовать эту информацию, например, для получения уведомления от вашей базы данных или других операций.