标签:
我AlarmManager设置重复的意图,但它有一点trouble所以希望有人可以帮助。 总结 有2个正在申请的意图.a个运行在1000和其他每天跑2000.each包含从数据库中以供识别之行ID。该代码如下所示:Intent i = new Intent(mContext, ScheduleReceiver.class); i.putExtra(RuleDBAdapter.KEY_ROWID, (int)taskId); PendingIntent pi =PendingIntent.getBroadcast(...); mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
删除: 问题是,当我们需要删除其中之一。正确的方法来删除一个挂起的意图是建立一个相同的一个,然后调用从AlarmManager取消。 Android的 公共无效取消(PendingIntent操作) 删除与匹配的意图任何警报。任何报警的任何类型,其意图匹配这一个(由filterEquals(意向)的定义),将被取消。 公共布尔filterEquals(意向除外) 确定两个意图是为意图分辨率(过滤)的目的。也就是说,如果他们的行动 CodeGo.net,数据,类型,级别和类别都是这并不包含在意向任何额外的数据。 所以在上面的例子,如果我做一个相同的意图再取消,上述两种意图将被取消,他们是从类/动作等(除了“额外”的数据,但ROWIDfilterEquals不关心额外的数据)。 有什么解决方法吗?
1. 你可以在requestCode创建挂起的意图时:
PendingIntent pi =PendingIntent.getBroadcast(mContext, yourUniqueDatabaseId,i,PendingIntent.FLAG_ONE_SHOT);这将创建一个Intent是唯一匹配的目的..
myIntent.setAction(""+System.currentTimeMillis());这将filterEquals返回false。 我需要一个类似的解决方案从多个号码发送短信通知, 为了使通知到启动的短信螺纹观众的不同的号码。
intent.setAction("ACTION_" + taskId + "_" + currentTimestamp);
Intent intent = new Intent(reminderFire); intent.addCategory(reminderCategory); Uri.Builder builder = new Uri.Builder(); builder.scheme(context.getString(R.string.scheme)); builder.authority(context.getString(R.string.intent_filter_reminder_host)); builder.appendQueryParameter("oid", Reminder.getOid()); intent.setData(builder.build());AndroidManifest入口
<receiver android:name=".client.MyReminder" android:enabled="true" > <intent-filter> <action android:name="com.example.client.reminder.fire"/> <action android:name="com.example.client.reminder.category"/> <data android:host="@string/intent_filter_reminder_host" android:scheme="@string/scheme" /> </intent-filter> </receiver>通过这样做,你也可以在意向测试的唯一性,然后才会慢慢增加一条,作为一个挂起的意图,而如果你的单元测试。
如何创建不同pendingintent所以filterEquals()返回false?
标签:
原文地址:http://my.oschina.net/cng1985/blog/501565