【问题标题】:android intents alarmmanagerandroid意图警报管理器
【发布时间】:2010-08-07 20:12:38
【问题描述】:
我正在尝试创建将使用警报管理器设置的意图。目前,我可以用一个意图来执行此操作,向其中添加额外的数据(字符串,但我将它们作为一个带有分隔符的字符串发送),一切正常并在正确的时间关闭。但是,当我尝试像这样发送多个意图时,它们会被覆盖,并且只有一个在正确的时间发出。我如何构建我的意图,使它们看起来与警报管理器不同(我认为它们在运行 filterIntent() 时会被删除)。
长话短说-putExtra() 使所有意图看起来仍然相同......我怎样才能让它们看起来不同,这样它们就不会被删除(并跟踪它们以防我想删除特定的意图)
【问题讨论】:
标签:
android
android-intent
alarmmanager
【解决方案1】:
这就是我为我的小部件安排更新的方式。每个都可以是唯一的,因为它们具有唯一的小部件 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);
【解决方案2】:
根据文档,AlarmManager 使用 filterEquals() 检查两个 Intents 是否等效。查看filterEquals() 的文档,了解它如何确定两个Intents 是否相等。另外,chris324的解决方案也不错。