是否可以让通知启动广播接收器?
我试过这段代码,但它不起作用。
通知已创建,但当我点击它时没有任何反应。
注意:当我将 notificationIntent 更改为从 MyBroadcastReceiver.class 指向一个 Activity (如 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" />
最佳答案
从你的代码...
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
带有“ Action ”,例如...
Intent notificationIntent = new Intent(MyApp.ACTION_DO_SOMETHING);
您还需要指定一个 <intent-filter>
<receiver android:name=".MyBroadcastReceiver" />
部分 list 的一部分。
关于android通知不会触发BroadcastReceiver onReceive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941037/