android通知不会触发BroadcastReceiver onReceive

标签 android android-intent android-notifications

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

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

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

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

相关文章:

android - 通过代码获取所有Android Lollipop通知

java - Android自定义工具栏导致java.lang.NoClassDefFoundError

android - 有没有办法将动态图像(Drawables)设置为通知图标?

android - 如何在android中获得 Intent 的结果?

android - 注册 Intent 过滤器以接受任何类型的文件?

android - 如何使用 RemoteViews 更新通知?

android - Facebook 登录时出现 NoClassDefFoundError

java - 如何使用 retrofit2 将 double 转换为字符串?

java - 修改/增强 YouTube 教程以在内部播放视频

java - Android:将变量传递给非 Activity 类