android Notification不会触发BroadcastReceiver onReceive

时间:2012-06-07 23:02:35

标签: android android-intent android-notifications

是否可以通知广播接收器?

我试过这段代码,但它不起作用。

通知已创建但当我点击它时没有任何反应。

注意:当我将notificationIntent更改为从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" />

1 个答案:

答案 0 :(得分:32)

从你的代码......

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

创建定位PendingIntent的{​​{1}}时,您必须使用BroadcastReceiver而不是getBroadcast(...)

请参阅PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)

另外,请勿像这样创建getActivity(...) ...

Intent

这是一个明确的Intent notificationIntent = new Intent(context,MyBroadcastReceiver.class); ,它针对特定的类(通常用于启动特定的Intent类)。

而是使用“动作”创建“广播”Activity,例如......

Intent

您还需要为清单的Intent notificationIntent = new Intent(MyApp.ACTION_DO_SOMETHING); 部分指定<intent-filter>部分。