首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AlarmManager getRepeating可能

AlarmManager getRepeating可能
EN

Stack Overflow用户
提问于 2015-05-08 14:58:46
回答 1查看 59关注 0票数 0

我使用AlarmManager每x分钟检查一次GPS位置:

代码语言:javascript
复制
private void updateLocationTimer(int interval) {

    Intent intent = new Intent(context, LocationService.class);
    intent.setAction(Constants.ACTION_REQUEST_LOCATION);
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    if (interval > 0) 
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), interval, pendingIntent);
    else    
        alarmManager.cancel(pendingIntent);
}
  1. 此方法是在更改首选项中的GPS间隔后调用的。
  2. 在AutoStartReceiver的帮助下,在重新启动时调用它。
  3. 它在我的应用程序的每一开始都被称为。

问题是,3.覆盖并重新启动每个restarts上的警报,甚至间隔为12小时。

是否有像AlarmManager.getRepeating这样的方法可以检查最后一个警报?

或者,一旦使用(1)设置了间隔,我是否可以依赖AlarmManager。或者(2)?如果我的应用程序崩溃了会发生什么?有什么情况下Android会自动取消我的警报吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-08 15:48:02

是否有像AlarmManager.getRepeating这样的方法可以检查最后一个警报?

不,对不起。AlarmManager是一个只写的API.

或者,一旦使用(1)设置了间隔,我是否可以依赖AlarmManager。或者(2)?如果我的应用程序崩溃了会发生什么?有什么情况下Android会自动取消我的警报吗?

简单的崩溃不应该引起问题。如果用户强制-停止(通过设置中的“强制停止”按钮),这也将取消您的警报,以及其他影响。

我推荐的方法只是跟踪您最后一次通过警报在每次LocationService调用中获得控制权的时间,例如通过SharedPreferences中的一个值。然后,您的启动程序图标可以具有如下逻辑:

  • 如果这个值不存在,那么这大概是安装后您的应用程序的第一次运行,所以请安排警报并更新SharedPreferences以反映您在这里得到了控制。
  • 如果存在这个值,并且它是可信的(例如,您试图每12小时获得控制,最后一次控制是在7小时前),那么您假设一切都很好,什么也不做。
  • 如果值存在,并且它是不可信的(例如,您试图每12小时获得控制,最后一次控制是在3周前),则假设用户强制阻止了您,因此您再次设置了警报并更新了SharedPreferences

其他一些关于你的具体案例的说明:

  • 不能直接使用带有_WAKEUP警报的服务。将WakefulBroadcastReceiver与您的服务结合使用,以确保设备保持清醒。而且,您可能最终会使用自己的WAKE_LOCK (尽管仍然使用BroadcastReceiver作为通过警报启动的东西),因为WakefulBroadcastReceiver是在考虑IntentService的情况下编写的,所以您不会使用它。
  • 使用PendingIntent风格的LocationManagerGoogleApiClient上的位置更新API可能会更好,而不是为所有这些维护您自己的服务。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30126912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档