12

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

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

通知已创建,但是当我单击它时,什么也没有发生。

注意:当我将 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);

这是广播接收器

public static class MyBroadcastReceiver extends BroadcastReceiver {

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

 }
}

AndroidManifest.xml 内部

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

1 回答 1

36

从你的代码...

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

创建PendingIntent目标 aBroadcastReceiver时,您必须使用getBroadcast(...)而不是getActivity(...)

请参阅PendingIntent.getBroadcast(上下文上下文,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" />

于 2012-06-07T23:15:42.270 回答