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