2012-06-07 20 views
9

ブロードキャスト受信者が通知を開始することは可能ですか?アンドロイド通知はブロードキャスト受信者のonReceiveを起動しません

このコードを試しましたが、うまくいきませんでした。

通知が作成されますが、クリックすると何も起こりません。

注:notificationAntentを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); 

は...

public static class MyBroadcastReceiver extends BroadcastReceiver { 

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

} 
} 

内のAndroidManifest.xmlコードから

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

答えて

31

BroadcastReceiverである

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

BroadcastReceiverをターゲットにしてPendingIntentを作成する場合は、ではなくgetBroadcast(...)を使用する必要があります。

(通常、特定の Activityクラスを開始するために使用される)特定のクラスを対象と明示 Intentある
Intent notificationIntent = new Intent(context,MyBroadcastReceiver.class); 

...このようなあなたのIntentを作成していない、またPendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)

を参照してください。 。

は、代わりに

Intent notificationIntent = new Intent(MyApp.ACTION_DO_SOMETHING); 

はまた、あなたのマニフェストの<receiver android:name=".MyBroadcastReceiver" />セクションの<intent-filter>セクションを指定する必要があります...のような「アクション」でIntent「ブロードキャスト」を作成します。

+1

@Abhishek:問題ありません。初めて通知を処理したとき、 'Service '(' getService'を使用)を実際に開始したいときに 'PendingIntent'に' getActivity'を使って同じトラップに落ちました。レッスンはよく学んだ。 :) – Squonk

+3

@AbhishekあなたはnotificationIntentのsetClassについて言及していませんでした 'notificationIntent.setClass(context、MyBroadcastReceiver.class);' – AbdullahDiaa

関連する問題