2012-06-07 10 views
9

Ist es möglich, eine Benachrichtigung einen Broadcast-Empfänger zu starten?android Benachrichtigung löst nicht BroadcastReceivers onReceive

Ich habe diesen Code versucht, aber es funktioniert nicht.

Benachrichtigung wird erstellt, aber wenn ich darauf klicke passiert nichts.

HINWEIS: Wenn ich die notificationIntent von MyBroadcastReceiver.class auf eine Aktivität (wie MainActivity.class) zeigen, funktioniert es einwandfrei.

Meldungserstellung:

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

Hier ist die BroadcastReceiver

public static class MyBroadcastReceiver extends BroadcastReceiver { 

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

} 
} 

Innen AndroidManifest.xml

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

Antwort

31

aus dem Code ...

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

Beim Erstellen eines PendingIntent, das auf BroadcastReceiver abzielt, müssen Sie getBroadcast(...) und nicht getActivity(...) verwenden.

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

auch nicht schaffen Ihre Intent so ...

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

, dass eine explizite Intent ist, die eine bestimmte Klasse richtet sich (für eine bestimmte Activity Klasse in der Regel beginnend) .

erstellen Anstatt eine ‚Sendung‘ Intent mit einer ‚Aktion‘ wie ...

Intent notificationIntent = new Intent(MyApp.ACTION_DO_SOMETHING); 

Sie brauchen auch einen <intent-filter> Abschnitt für den <receiver android:name=".MyBroadcastReceiver" /> Abschnitt Ihres Manifest zu spezifizieren.

+1

@Abhishek: Kein Problem. Als ich zum ersten Mal mit Benachrichtigungen arbeitete, fiel ich in die gleiche Falle, indem ich 'getActivity' für einen 'PendingIntent' verwendete, als ich eigentlich einen' Service' starten wollte (der 'getService' verwendet). Eine gut erlernte Lektion. :) – Squonk

+3

@Abhishek hast du vergessen, setClass für die notificationIntent 'notificationIntent.setClass (context, MyBroadcastReceiver.class);' – AbdullahDiaa

Verwandte Themen