当我的应用程序在后台运行时,onLocationChanged调用为时已晚

时间:2019-01-05 09:39:48

标签: android service location

我正在获取服务中的位置更新。当我的应用程序位于前景中时,会在几秒钟内调用OnLocationChange。但是当它在后台运行时,会在几分钟后被调用。是什么问题?解决方案是什么? 在后台运行时,我不会停止服务。

1 个答案:

答案 0 :(得分:0)

我发现了问题。 Android从8.0起here开始对位置更新添加了限制:

“为了降低功耗,Android 8.0(API级别26)限制了后台应用检索用户当前位置的频率。应用每小时只能接收几次位置更新。”

解决方案:您需要启动Foreground Service,这需要显示通知,例如:

Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent =
        PendingIntent.getActivity(this, 0, notificationIntent, 0);

Notification notification =
          new Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
    .setContentTitle(getText(R.string.notification_title))
    .setContentText(getText(R.string.notification_message))
    .setSmallIcon(R.drawable.icon)
    .setContentIntent(pendingIntent)
    .setTicker(getText(R.string.ticker_text))
    .build();

startForeground(ONGOING_NOTIFICATION_ID, notification);