Articles of alarmmanager

如何创建不同的pendingintent使filterEquals()返回false?

我正在使用AlarmManager设置重复意图,但它已经引起了一些小麻烦,所以希望任何人都可以提供帮助。 概要 有2个未决意图。 一个运行在1000,另一个运行在每天2000。 每个包含来自数据库的行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调用cancel。 Android文档: public void cancel(PendingIntent操作) 删除具有匹配Intent的所有警报。 任何types的警报,其Intent与此匹配的警报(由filterEquals(Intent)定义)将被取消。 public boolean filterEquals(Intent other) 为了意图解析(过滤)的目的,确定两个意图是否相同。 也就是说,如果他们的行为,数据,types,类别和类别是相同的。 这不会比较意图中包含的任何额外数据 。 所以在上面的例子中,如果我做出相同的意图然后取消, 上述两个意图将被取消,因为它们来自同一个类/相同的动作等(除了“额外”数据是rowId但filterEquals不在乎关于额外的数据)。 这有什么解决方法吗?

Android AlarmManager触发每一轮“10分钟”

我在我的应用程序中使用AlarmManager,如下所示: alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), AlarmManager.INTERVAL_HALF_DAY, intent); 我期望在每个触发器的12到24小时之间触发警报。 但是,特别是在HTC设备上的行为相当奇怪: 每次触发警报时,我们都会向服务器发送HTTP请求。 在所有设备上,随着时间的推移,我们会看到请求统一到服务器,但在HTC设备上每10分钟(XX:10,XX:20,……)都会出现峰值: 这些尖峰的原因是什么? 为什么它只能在HTC设备上?

关闭应用程序后取消Android警报

我有一个AlarmManager的问题,我设置了调度重复警报的代码,在我运行应用程序后,警报运行正常。 即使我单击“主页”按钮(并且应用程序暂停),警报仍会按其间隔运行。 问题是如果我打开任务管理器并强制关闭应用程序,则警报停止运行。 这是正常的行为,有没有办法避免这种情况并在关闭应用程序后保持警报运行? 代码如下 – 该方法由ApplicationContext类onCreate()调用。 private void scheduleAlarm() { if (alarmScheduled == true) { return; } // we only need to schedule once. int alarmInterval = Def.pref(getApplicationContext()).getInt(“alarmInterval”, 30); final Intent intent = new Intent(getApplicationContext(), CollectorAlarmReceiver.class); final PendingIntent pending = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0); AlarmManager alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); alarmMgr.cancel(pending); // cancel others. alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, […]

Job Scheduler与后台服务

我有一个应用程序,其functionA应该每分钟在后台运行。 functionA是应用程序应该连接到数据库,读取一些数据然后获取设备的当前位置,并根据它们检查条件,如果条件为真,它应该向用户发送状态栏通知,以便用户点击通知,将显示应用程序的UI并发生一些事情。 这个后台任务应该每分钟都运行一次,无论应用程序是否被使用,关闭,终止(例如facebook或Whatsapp向我们显示通知,无论它们是否在应用程序堆栈中)。 现在我已经搜索并发现Android提供Job Scheduler , 后台服务 , AlarmManager和处理程序 。 但是我越了解他们,这些陈述对我来说就越矛盾。 关于处理程序我已经读过它们不存在长时间延迟,并将在系统重启后终止。 所以他们不适合我的任务。 但是AlarmManager似乎是这个问题的一个很好的候选者,因为在允许的情况下它们甚至在系统重启后也存在,并且可以重新运行应用程序。 但在Android文档中,Alarm Manager旨在用于必须在特定时间运行的任务(如闹钟)。 但我的任务必须每分钟运行一次。 然后是后台服务。 这更像是我在阅读后在后台下载的任务,而不是用于我已经解释过的事情。 JobScheduler似乎不是为了必须永久完成的任务,而是为了满足特定约束的任务,如空闲或没有网络……那么你建议使用哪些(或其他的,如果它们存在)对于我在第一部分中解释的任务

如何检测通知是否已被解除?

Android中是否有任何方法可以检测用户何时向左侧滑动通知并将其删除? 我正在使用闹钟管理器来设置重复警报,我需要在用户取消通知时停止重复警报。 这是我的代码: 设置重复提醒: AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), repeatFrequency, displayIntent); 我的通知代码: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Get the notification ID. int notifID = getIntent().getExtras().getInt(“Reminder_Primary_Key”); //Get the name of the reminder. String reminderName = getIntent().getExtras().getString(“Reminder_Name”); //PendingIntent stores the Activity that should be launched when the user taps the notification. Intent i […]

应用程序被Android或任务杀手杀死后如何保存预定的警报?

安排警报的代码。 PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, time, sender); 它的工作正常,但当我在任务杀手中杀死我的应用程序时,我丢失了我的预定警报。 如何解决这个问题呢?

识别并取消发送到AlarmManager的警报

如果我使用AlarmManager来安排警报(应该发送的PendintIntent),我如何在以后识别该警报以取消它? 我可以取消我的应用安排的所有闹钟吗?

取消另一个pendingintent中的AlarmManager pendingIntent

我想取消定义服务的AlarmManager,在这个服务中可能会启动一个新的AlarmManger或取消之前定义的警报。我知道在alarmManager.cancel(PendingIntent)中的params pendingintent,必须是相同的。与filterEquals(Intent other)比较但它仍然没有工作。解决失败。 这是我的代码 public class GetRoundStroe { private Store[] stores; private Context mContext; public GetRoundStroe(Context mContext) { this.mContext = mContext; } public Store[] getStores() { if (ComCommand.haveInternet(mContext)) { start_am_normal(); } else { start_am_silence(); } return stores; } public Store[] start_am_silence() { long firstTime = SystemClock.elapsedRealtime(); AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); if (AlarmHolder.mAlarmNormal != null) […]

AlarmManager的setRepeating和setInexactRepeating之间的区别

以下参数是什么: alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent); 以下内容: alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); 有什么区别,两者在function方面有何不同?

如何才能正确地将唯一的额外内容传递给待处理的意图?

我遇到了一个有关alarmManager的问题,以及与其一起使用的附加function的待处理意图。 如果我设置多个警报,它们将会关闭,但额外的设置保持不变。 我已经读过这些问题: android挂起意图通知问题 Android保持缓存我的意图额外,如何声明一个保持新鲜额外的待定意图? 我试过了: 为每个待处理的意图分配唯一的ID 使用所有待处理的意图标志, 一切都无济于事。 我不知道为什么它不起作用。 这是一段代码: Intent intent = new Intent(con, AppointmentNotificationReciever.class); intent.putExtra(“foo”, bar.toString()); int id = randomNum; PendingIntent sender = PendingIntent.getBroadcast(con, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender);