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", отлично работает.