我正在尝试创建将使用alarmmanager设置的意图。目前,我可以通过一个意图执行此操作,向其添加额外数据(字符串,但我将它们作为一个字符串与分隔符一起发送),一切正常并在正确的时间关闭。但是,当我尝试发送这样的多个意图时,它们会被覆盖,只有一个在正确的时间发生。我如何构建我的意图,使它们看起来与报警管理器不同(我认为它们在运行filterIntent()时会被删除)。
长话短说putExtra()使得所有意图看起来仍然相同...我怎样才能使它们看起来不同以便它们不会被删除(并且如果我想要删除特定的一个则跟踪它们)< / p>
答案 0 :(得分:0)
这就是我为我的小部件安排更新的方法。每个允许都是唯一的,因为它们具有唯一的小部件ID号。
Intent widgetUpdate = new Intent();
widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { appWidgetId });
widgetUpdate.putExtra(EXTRA_POSITION,0);
widgetUpdate.putExtra(EXTRA_URL, URL);
// make this pending intent unique by adding a scheme to it
widgetUpdate.setData(Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"), String.valueOf(appWidgetId)));
PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate, PendingIntent.FLAG_UPDATE_CURRENT);
// schedule the updating
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), updateRateSeconds * 1000, newPending);
答案 1 :(得分:0)
根据文档,AlarmManager
使用filterEquals()
检查两个Intent
是否等效。查看filterEquals()
的文档,了解它是如何决定两个Intent
是否相同的。此外, chris324 的解决方案非常好。