我使用AlarmManager每x分钟检查一次GPS位置:
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);
}问题是,3.覆盖并重新启动每个restarts上的警报,甚至间隔为12小时。
是否有像AlarmManager.getRepeating这样的方法可以检查最后一个警报?
或者,一旦使用(1)设置了间隔,我是否可以依赖AlarmManager。或者(2)?如果我的应用程序崩溃了会发生什么?有什么情况下Android会自动取消我的警报吗?
发布于 2015-05-08 15:48:02
是否有像AlarmManager.getRepeating这样的方法可以检查最后一个警报?
不,对不起。AlarmManager是一个只写的API.
或者,一旦使用(1)设置了间隔,我是否可以依赖AlarmManager。或者(2)?如果我的应用程序崩溃了会发生什么?有什么情况下Android会自动取消我的警报吗?
简单的崩溃不应该引起问题。如果用户强制-停止(通过设置中的“强制停止”按钮),这也将取消您的警报,以及其他影响。
我推荐的方法只是跟踪您最后一次通过警报在每次LocationService调用中获得控制权的时间,例如通过SharedPreferences中的一个值。然后,您的启动程序图标可以具有如下逻辑:
SharedPreferences以反映您在这里得到了控制。SharedPreferences。其他一些关于你的具体案例的说明:
_WAKEUP警报的服务。将WakefulBroadcastReceiver与您的服务结合使用,以确保设备保持清醒。而且,您可能最终会使用自己的WAKE_LOCK (尽管仍然使用BroadcastReceiver作为通过警报启动的东西),因为WakefulBroadcastReceiver是在考虑IntentService的情况下编写的,所以您不会使用它。PendingIntent风格的LocationManager或GoogleApiClient上的位置更新API可能会更好,而不是为所有这些维护您自己的服务。https://stackoverflow.com/questions/30126912
复制相似问题