Android: нажмите событие для уведомления строки состояния - PullRequest
13 голосов
/ 03 декабря 2010

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

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

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

Заранее спасибо,

Тим

(РЕДАКТИРОВАТЬ: я обновил свой код после прочтения первого ответа, но я все еще не знаю, как слушать намерение)

Ответы [ 2 ]

17 голосов
/ 03 декабря 2010

Я думаю, что лучший способ для вас обработать щелчок по уведомлению (может быть, единственный способ?) - это определить метод внутри класса, который вызываются 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 и вызовите метод, определенный в классе, для обработки уведомления.Вы можете извлечь идентификатор из входящего Намерения.

Обновление:

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

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

Также «yourpackage» следует заменить на имя пакета, включающего ваш класс, например «com.project».Foo».

2 голосов
/ 12 февраля 2014

Для таких чайников, как я: Получение этого 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
        }

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...