LocationListener 在 android 服务中的某个时间后不提供更新
Posted
技术标签:
【中文标题】LocationListener 在 android 服务中的某个时间后不提供更新【英文标题】:LocationListener doesn't provide update after sometime in android service 【发布时间】:2017-07-31 00:47:25 【问题描述】:我正在编写一个应用程序,我需要从后台快速获取位置更新。 因此,我编写了一个服务来实现所需的结果。
我从活动的 onCreate() 方法启动服务。
我面临的问题是,该服务能够在服务激活后大约 20 到 30 秒内提供位置更新。然后我没有收到任何更新。
这是服务的代码:
public class MyLocService extends Service
implements
LocationListener
private final LocationListener locationListener = this;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
Handler handler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable()
@Override
public void run()
if (checkPermission())
manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
else
//Request Permission
Intent permissionIntent = new Intent();
permissionIntent.setAction(LOCATION_PERMISSION_REQUIRED);
sendBroadcast(permissionIntent);
Looper.loop();
;
handler.post(runnable);
//Create notification nad run in foreground
startForeground(
NotificationCreator.getNotificationId(),
NotificationCreator.getNotification(context)
);
return Service.START_STICKY;
@Override
public void onLocationChanged(Location location)
Log.d("LocUpdate", location.getLatitude() + " : " + location.getLongitude());
每次我从以下活动启动服务时:
Intent intent = new Intent(this, MyLocService.class);
startService(intent);
我在 onLocationChange() 中获得更新 20 到 30 秒。
另一个观察结果是:如果我保持活动(从我启动服务的位置打开且可见),那么我将继续获取位置更新。 但是,当我关闭活动或终止应用程序并允许服务(单独)在后台运行时,尽管服务正在运行,但我没有收到任何位置更新,因为我可以在屏幕顶部看到通知。
我做错了什么?
【问题讨论】:
你能看到正在运行的应用列表上运行的服务吗?您的手机是否允许运行该服务?某些手机 rom 不允许默认 START_STICKY 重启服务,如果它被杀死 是的。我可以看到服务正在运行。我正在用棉花糖在 Redmi Note 4 上进行测试。出路是什么? 我的 redmi note 3 有问题,因为 MIUI 默认情况下不会让服务在被终止时重新启动。试试这个,转到设置>权限>自动启动>并允许您的应用程序自动启动 也许只是一个小提示。为了提高电池性能并保持良好的精度,您可以尝试使用FusedLocationApi
。还可以尝试在更新之间插入一些最短时间
我的应用程序启用了自动启动。我使用了融合位置,但结果是一样的。位置监听器停止提供位置更新。
【参考方案1】:
我已经解决了这个问题。在miui中关闭电池优化或将应用添加为例外。代码完美运行。
【讨论】:
以上是关于LocationListener 在 android 服务中的某个时间后不提供更新的主要内容,如果未能解决你的问题,请参考以下文章
在 AndEngine 游戏引擎旁边使用 LocationListener