2016-06-14 55 views
0

因为我需要每隔30秒收集一次GPS位置并上传到服务器,所以我想每隔30秒发射一次android报警管理器(即使我的应用程序处于背景深度睡眠状态)。Android每30秒重复报警管理器

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent(this, OnAlarmReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);    
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime() + 30000, 
       30000, 
       pi); 

我上面的代码中使用,它做工精细,当设备处于睡不着mood.But好像它不处于休眠状态的情绪正常工作。 经过一段时间后,它会以5分钟的间隔点燃。

我的应用程序在android 5.0.2 Samsung Tablet上运行。

我发现有以上(特别是三星设备)与报警经理是Android 5.0的一个问题 https://code.google.com/p/android/issues/detail?id=82001

这方面的任何解决方法吗?

谢谢。

+0

如果这是由省电模式引起的,唯一的方法是手动将您的应用列入白名单,并通过对话框告知用户此事。华为Mate 7(棒棒糖和棉花糖)也有类似问题,他们也实施了自己的电源管理,无法摆脱这种情况。 – Opiatefuchs

+0

并且警告:在将来的版本中,或者自从棉花糖以后更好,您不能使用此方法(setRepeating)。并且AlarmManager仅限于每9分钟触发一次,所以这将是一项艰巨的任务,您必须采取一些解决方法。请参阅打盹模式文档:https://developer.android.com/training/monitoring-device-state/doze-standby.html – Opiatefuchs

+0

好的谢谢。如果有其他方法可以在后台获取GPS位置?我的应用程序需要一天以上捕获GPS位置。我认为服务不是一个可靠的解决方案,大多数例子都使用警报管理器/唤醒锁来实现这一点。 –

回答

0

对于5.0以上的版本使用setInexactRepeating并使用RTC_WAKEUP。即使手机处于睡眠模式,这也会触发警报。这对我有效。 如果您不想使用服务获取GPS位置。您可以将地图相关代码放入广播接收器,并将代码上传到服务器。在最糟糕的情况下,服务是捕获GPS位置等后台过程的最佳选择。

+0

我在华为版本5.1.1平板电脑上试过这个,它不工作。 –