我发出通知,我想做的是,当用户单击我发送的通知以清除它时,我希望执行挂起的广播。 有一个名为"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"