我有一项服务,我会在获取设备位置的所有工作,以便将其发送到我的服务器。
为了获取位置我使用Google的LocationServices.FusedLocationApi
API,如下所示:
Intent intent = new Intent(this, LocationIntentService.class);
mLocationPendingIntent =
PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
LocationRequest request = LocationRequest.create().setInterval(1500).setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, request, mLocationPendingIntent);
以上工作正常,除非手机进入睡眠状态,否则屏幕会自动关闭或手动按下电源按钮以便这样做。
因此存在问题,即使服务仍在运行,gps也会停止获取位置结果;尚未被系统吃掉。
我认为问题可能是由系统关闭的实际gps以节省电池但我不知道如何设置它不会停止向我发送位置,即使手机处于空闲状态。
我想在AlarmManager
上设置一个重复闹钟以回调我的WakefulBroadcastReceiver
实施,但这样做会非常耗电,甚至不可行,因为系统似乎因为这个原因限制了警报间隔从Android 5.1开始。