创建通知:
PendingIntent pIntent = PendingIntent.getActivity(context, (int) taskId, intent, 0); intent.setAction(Utils.MARK_AS_DONE); PendingIntent pIntentMarkAsDone = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setTicker(ticker) .setContentTitle(title) .setContentText(description) .setSmallIcon(getAlarmIcon(type)) .setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.mipmap.ic_launcher)) .setContentIntent(pIntent) .addAction(0, context.getString(R.string.mark_as_done), pIntentMarkAsDone); Notification notification = builder.build(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify((int) taskId, notification);
我使用getBroadcast的挂起意图添加了添加。
接收器:
public class NotificationReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Log to check } }
这堂课应该"收到"那个行动。我还添加了Manifest
清单:
<receiver android:name=".NotificationReceiver"> <intent-filter> <action android:name="<package_name>.MARK_AS_DONE"/> </intent-filter> </receiver>
嗯,onReceive没有收到。我做错了什么?
答案 0 :(得分:1)
TL; DR:创建一个新的Intent
,而不是重用intent
中的<intent-filter>
,并从<receiver>
中删除PendingIntent pIntent = PendingIntent.getActivity(context, (int) taskId, intent, 0);
。
你的第一行是:
intent
这意味着new Intent(context, YourActivityClass.class)
标识了某些活动。如果您是通过ComponentName
创建的,则会在其中设置setAction()
,以识别您的活动。
然后,您在intent
上致电getBroadcast()
并将其与intent
一起使用。但是,除了设置(或替换)操作之外,ComponentName
中的所有其他内容都与原来的相同。特别是,识别活动的ComponentName
仍然存在。因此,当发送广播时,Android无法传送,因为组件无效(活动无法直接接收广播),并且操作字符串被忽略(因为Intent
设置Intent
动作和类别之类的东西不再用于路由)。
所以,我建议您创建两个Intent
个对象,一个用于活动,一个用于接收器。
请注意,您不需要接收器的操作字符串。您可以使用显式new Intent(context, NotificationReceiver.class)
构造函数(<intent-filter>
)。实际上,在接收器上使用操作字符串对安全性有害,因为现在任何应用程序都可以向您发送该广播。因此,我建议删除Intent
并使用明确的PendingIntent
来制作广播jQuery( document ).ready(function( $ ) {
$('.orange-cell, .green-cell, .purple-cell, .white-cell').hover(function() {
var colorClass = $(this).attr('class').split(' ')[1];
$("."+colorClass ).addClass('z-relative');
$('#darkness').fadeTo(200, 1);
},function() {var colorClass = $(this).attr('class').split(' ')[1];
$("."+colorClass ).removeClass('z-relative');
$('#darkness').fadeTo(200, 0, function(){
$(this).hide();
});
});
});
。