待处理的 BroadCastReceiver 不会开始使用 setDeleteIntnet



我发出通知,我想做的是,当用户单击我发送的通知以清除它时,我希望执行挂起的广播。 有一个名为"setDeleteIntent"的方法。根据此方法的文档,当用户清除收到的通知时,它应该启动挂起的 BraodCast 接收器7。

我创建了一个广播接收器类,如下面的代码所示,并为"setDeleteIntent"方法提供挂起的广播。 但是在运行时,当收到的通知然后清除时,BroadcastReceiver 的"onReceive"中的日志消息没有显示在控制台上!!

请看下面的代码,请让 em k 知道为什么 broadcastReceiver 的 'onReceive' 永远不会执行。

注意:BroadCasrReceiver 是使用"LocalBroadCastReceiver"注册的,如代码所示。

代码

String title = getString(R.string.app_name);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher);
builder.setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg).setContentTitle(title);
builder.setContentIntent(contentIntent).setAutoCancel(true);
//builder.setWhen(Long.valueOf(eu.man.m24wsapp.utils.gcm.TimeUtils.getNowTS()) + 5000);
builder.setLights(Color.argb(1, 0, 0, 255), 1000, 400);
builder.setOngoing(false);
builder.setAutoCancel(true);

builder.setDeleteIntent(getPendingBroadCast());
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, builder.build());
....
....
....
//getPendingBroadCast method
private PendingIntent getPendingBroadCast() {
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BCRDismissNotification(),
new IntentFilter(BCRDismissNotification.ACTION_DISMISSED_NOTIFICATION));
Intent intent = new Intent(this, BCRDismissNotification.class);
//intent.setAction(BCRDismissNotification.ACTION_DISMISSED_NOTIFICATION);
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}

宽播接收器

public class BCRDismissNotification extends BroadcastReceiver {
private final static String TAG = BCRDismissNotification.class.getSimpleName();
public final static String ACTION_DISMISSED_NOTIFICATION = "action_dismissed_notification";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "*********************   BCR     **************");
}

}

你已经回答了你自己的问题。这不能与LocalBroadcastManager一起使用!

使用LocalBroadcastManager注册接收器时,它仅侦听应用程序广播的广播Intent。在您的情况下,广播Intent由 Android 的通知框架发送,该框架不是应用程序的一部分。在这种情况下,您注册的接收器将不会被触发。

您需要为接收机注册全球广播。您可以通过创建接收器的实例并在应用程序Context上调用registerReceiver()来执行此操作,或者您可以使用<receiver>标记将接收器添加到清单中,并确保设置android:exported="true"

相关内容

  • 没有找到相关文章

最新更新