码迷,mamicode.com
首页 > 其他好文 > 详细

如何创建不同pendingintent所以filterEquals()返回false?

时间:2015-09-06 11:17:20      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

我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是唯一匹配的目的..
2. 公共布尔filterEquals(意向等)进行比较的动作,数据,类型,封装,组件和类,但做多余的,所以actor之间的差别不能区分意图。尝试不同的数据集 CodeGo.net,这些意图,该数据可能是微不足道的尤里斯。 尝试阅读源代码来获得
3. 试图把一个虚拟行动的意图。 例如:。
myIntent.setAction(""+System.currentTimeMillis());
这将filterEquals返回false。 我需要一个类似的解决方案从多个号码发送短信通知, 为了使通知到启动的短信螺纹观众的不同的号码。
4. 把任务ID和进入意向的作用。这样一来,你的挂起意图与任务相关联的id和意图仍然会在不同的过滤条件。
intent.setAction("ACTION_" + taskId + "_" + currentTimestamp);

5. 在我的情况,我没有一个很好的方法来生成一个唯一的密钥为我挂起的意图所以我所做的就是自定义的数据添加到生成的意图。 一旦你开始填充数据属性,你必须给一个数据添加到意图过滤器在Android清单。如果你不这样做,将不会触发您的自定义接收器。 示例: 意图
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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!