2012-06-07 3 views
9

Возможно ли, чтобы уведомление начало вещательный приемник?android Notification не запускает BroadcastReceiver onReceive

Я пробовал этот код, но он не работает.

Уведомление создается, но когда я нажимаю на него, ничего не происходит.

ПРИМЕЧАНИЕ: Когда я изменяю уведомление, чтобы указать из MyBroadcastReceiver.class в действие (например, MainActivity.class), он отлично работает.

создание Извещение:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(
     Context.NOTIFICATION_SERVICE); 

    int notificationIconId = XXXXXX 
    Notification notification = new Notification(
     notificationIconId, 
     XXXXXX, 
     System.currentTimeMillis() 
    ); 

    CharSequence contentTitle = XXXXXXX 
    CharSequence contentText = XXXXXX 

    Intent notificationIntent = new Intent(context,MyBroadcastReceiver.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
    notificationManager.notify(1,notification); 

Вот BroadcastReceiver

public static class MyBroadcastReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    /* 
      */ 

} 
} 

Внутри AndroidManifest.xml

<receiver android:name=".MyBroadcastReceiver" /> 

ответ

31

Из кода ...

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

При создании PendingIntent, нацеленного на BroadcastReceiver, вы должны использовать getBroadcast(...), а не getActivity(...).

См PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)

Кроме того, не создать свой Intent, как это ...

Intent notificationIntent = new Intent(context,MyBroadcastReceiver.class); 

Это явный Intent, который нацелен на конкретный класс (используется для запуска конкретного Activity класса обычно) ,

Вместо создания «вещать» Intent с «действия», такие как ...

Intent notificationIntent = new Intent(MyApp.ACTION_DO_SOMETHING); 

Вам также необходимо указать <intent-filter> раздел для <receiver android:name=".MyBroadcastReceiver" /> части манифеста.

+1

@Abhishek: проблем нет. В первый раз, когда я работал с уведомлениями, я попал в ту же ловушку с использованием 'getActivity' для' PendingIntent', когда я действительно хотел запустить 'Сервис' (который использует' getService'). Урок хорошо изучен. :) – Squonk

+3

@Abhishek вы забыли упомянуть setClass для уведомленияIntent 'notificationIntent.setClass (контекст, MyBroadcastReceiver.class);' – AbdullahDiaa