Android: событие Click для уведомления строки состояния

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

public void txtNotification(int id, String msg){
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(android.R.drawable.sym_action_email, msg, System.currentTimeMillis());

    // The PendingIntent will launch activity if the user selects this notification
    Intent intent = new Intent(this, MainActivity.class)
    intent.putExtra("yourpackage.notifyId", id);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 0);

    notification.setLatestEventInfo(this, "title", msg, contentIntent);

    manager.notify(id, notification);
}

При нажатии на уведомление, я хочу вызвать метод, желательно с доступом к идентификатору уведомления.

Спасибо заранее,

Тим

(EDIT: я обновил свой код после прочтения первого ответа, но я до сих пор не знаю, как слушать намерение)

Ответы

Ответ 1

Я думаю, что лучший способ обработать щелчок на уведомлении (возможно, единственный способ?) - определить метод внутри класса, который вызывает ваш PendingIntent (MainActivity в этом случае). Вы можете изменить свое намерение, прежде чем передавать его в getActivity(), чтобы включить идентификатор уведомления:

// The PendingIntent will launch activity if the user selects this notification
Intent intent = new Intent(this, MainActivity.class)
intent.putExtra("yourpackage.notifyId", id);
PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 0);

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

Update:

Чтобы ваша деятельность обрабатывала уведомление, вам нужно сначала определить Activity в вашем файле AndroidManifest.xml, включая любые фильтры намерений, в которых вы нуждаетесь. Затем в вашей деятельности onStart() вы можете извлечь дополнительные данные из входящего намерения и действовать в соответствии с этими данными. Это обзор высокого уровня, поэтому я предлагаю вам прочитать части руководства Dev, чтобы ознакомиться с концепциями. Следующая страница - хорошее место для начала:

http://developer.android.com/guide/topics/fundamentals.html

Также "yourpackage" следует заменить именем пакета, который включает ваш класс, например "com.project.foo".

Ответ 2

Для таких манекенов, как я: Получение этого пакета yourpackage.notifyId в MainActivity:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bundle intent_extras = getIntent().getExtras();
        if (intent_extras != null && intent_extras.containsKey("yourpackage.notifyId"))
        {
          //Do the codes
        }

}

В моем случае - использовал его, чтобы определить, кто открывает мою mainactivity, пользователя или вызов извещения, связанный с GcmIntentService... Постскриптум Я использовал имена без "youpackage", отлично работает.