通知点击发送广播

时间:2015-08-11 09:00:26

标签: android push-notification broadcastreceiver google-cloud-messaging android-pendingintent

我有一个基本上是webview和GCM通知的应用程序。我想实现以下目标:如果用户在应用程序中并收到通知,当他点击通知时我希望webview加载通知中提供的URL。

我试图通过使用广播接收器来实现这一目标,但它并不起作用。

我在MainActivity中动态注册接收器:

private void registerNotificationReceiver() {
        final IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_LOAD_URL_FROM_NOTIFICATION);
        Log.i(TAG, "registerNotificationReceiver()");
        this.receiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d(TAG, "notification received");

            }
        };

        super.registerReceiver(this.receiver, filter);
    }

在GCM Listener中我使用PendingIntent.getBroadast():

final Intent broadcastIntent = new Intent(MainActivity.ACTION_LOAD_URL_FROM_NOTIFICATION);
        PendingIntent intent = PendingIntent.getBroadcast(getApplicationContext(), 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        notificationBuilder.setContentIntent(intent);

        notification = notificationBuilder.build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        NotificationManager mNotificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, notification);

我不明白为什么不调用MainActivity类中的onReceive。收到的消息"通知"没有显示。 你能帮助我吗?谢谢:))

1 个答案:

答案 0 :(得分:6)

我现在找不到原因但有安全理由。最新的Android版本不允许您从“类型”远程进程触发侦听器,而不是明确的。

intentyou广播必须明确它的工作。显式意味着您必须显式调用将处理意图的组件(接收方)。因此,此接收器必须在其自己的类中声明,并在清单中声明为<receiver>

Explicit Broadcast Intents http://codetheory.in/android-broadcast-receivers/部分中关注此人的示例 你的意志将完成