当电话空闲时,Android FusedLocationProvider停止提供位置

时间:2016-03-15 13:43:39

标签: android geolocation location fusedlocationproviderapi android-fusedlocation

我正在使用FusedLocationProvider处理位置跟踪应用程序。我有一个后台服务,每5分钟跟踪一次电话的位置。

一切运行良好,但一旦手机闲置,经过3到4小时的时间,后台服务就会停止占据位置。当用户解锁手机时,跟踪会再次开始。

有人可以指导一下可能导致问题的原因吗?

3 个答案:

答案 0 :(得分:1)

一种可能性是Android M Doze Mode。当设备拔下插头并静止一段时间后,系统会通过限制应用访问CPU密集型服务来尝试节省电池电量。在大约1小时不活动之后启动打盹模式,然后将定期任务等安排到维护窗口。当用户解锁设备时,再次关闭打盹模式。

您可以在开发者文档中找到有关打盹模式的更多信息: http://developer.android.com/training/monitoring-device-state/doze-standby.html

答案 1 :(得分:0)

也许您的服务正在停止,因为手机需要释放内存,以免导致您的服务中断。确保将您的服务设置为前台服务。

  

前台服务是一种服务,被认为是用户积极意识到的东西,因此在内存不足时不会成为系统杀死的候选者。前台服务必须为状态栏提供通知,该通知位于"正在进行的"标题,这意味着除非服务被停止或从前台删除,否则不能解除通知。   http://developer.android.com/guide/components/services.html

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
        System.currentTimeMillis());

Intent notificationIntent = new Intent(this, ExampleActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(this, getText(R.string.notification_title),
        getText(R.string.notification_message), pendingIntent);

startForeground(ONGOING_NOTIFICATION_ID, notification);

答案 2 :(得分:0)

Android会在闲置一段时间后让您的服务进入休眠状态。您可以使用WakeLock来防止这种情况发生。

public int onStartCommand (Intent intent, int flags, int startId)
{
    PowerManager mgr = (PowerManager)getSystemService(Context.POWER_SERVICE);
    mWakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
    mWakeLock.acquire();
    ...

    return START_STICKY;
}

public void onDestroy(){
    ...
    mWakeLock.release();
}