Android Fused Location API - 如何在一个应用程序中使用 PRIORITY_BALANCED_POWER_ACCURACY
和 PRIORITY_HIGH_ACCURACY
?
你好,
我正在开发一个需要发送定期位置更新的应用程序。
我使用了 Fused Location API 和 locaiton pending intent。 (更新间隔 60 秒,最小位移 100 米)。我已经用 PRIORITY_BALANCED_POWER_ACCURACY
和 Intent 服务注册了一个 locationclient 待定 Intent 。 IntentService 在 locaiton 更改时被调用,这对少数测试驱动器来说效果很好。但这只是有时有效。当它不起作用时,我希望使用 PRIORITY_HIGH_ACCURACY
我注意到当我使用 PRIORITY_HIGH_ACCURACY
时,它提供了很好的位置,但电池使用率相当高。所以我决定同时使用 PRIORITY_HIGH_ACCURACY
和 PRIORITY_BALANCED_POWER_ACCURACY
以及 ActivityRecognition。
最初程序使用 LocationPendingIntent 从 PRIORITY_BALANCED_POWER_ACCURACY
开始,当 2 分钟没有更新时,我使用 LocationListener(和 onLocationChanged 方法)实现 PRIORITY_BALANCED_POWER_ACCURACY
如果仍然没有我调用 PRIORITY_HIGH_ACCURACY
的位置。
我在这里面临的问题是,一旦切换到 PRIORITY_HIGH_ACCURACY
,LocationPendingIntent(使用 PRIORITY_BALANCED_POWER_ACCURACY
注册)总是在之后使用 PRIORITY_HIGH_ACCURACY
这个。我正在通过调用 .removeupdates(locationListener); 在 onLocationChanged 方法的末尾删除位置更新;然而,GPS 图标每分钟都会出现。
我考虑过对 onLocationChanged 方法使用静态方法,但我知道这对于 Android 应用来说不是一个好的做法。同时使用 PendingIntent 和 onLocationChanged 是否存在任何已知问题?你能为我的问题提出解决方案吗?
权限设置为:
uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
如有任何帮助,我们将不胜感激。
谢谢。
最佳答案
(我意识到这是一个很晚的回应,但刚刚解决了这个问题,也许这些信息对某人有用)。我想做一些非常相似的事情,但遇到了两个问题:
当我使用与最初请求更新时完全相同的参数时,我发现 removeLocationUpdates 失败了 - 也就是说,我没有收到任何错误,结果回调表明取消工作正常。但是在调用 removeLocationUpdates 之后,位置更新一直在发生。我发现在此处的代码中使用参数 0 和 null 可以成功停止更新:
Intent selfIntent = new Intent(ACTION_CHECK_LOCATION, null, getApplicationContext(), <ServiceClass>.class); PendingIntent selfPendingIntent = PendingIntent.getService(getApplicationContext(), 0, selfIntent, 0);
我可能在调用 requestLocationUpdates 和 removeLocationUpdates 之间发生了冲突。我不想不小心停止我刚请求的更新,所以我最终得到了两个单独的类,一个处理每种类型的更新。
在我的例子中,我没有前台应用程序,而是使用服务进行后台更新。你可以在这里看到我的代码 - https://github.com/Esri/arcgis-runtime-demos-android/tree/master/2015-DS/LocalGeofence - 请注意,我正在使用另一个 SDK(Esri ArcGIS Runtime for Android SDK,我为 Esri 工作)但你可以忽略这一点,只看两个服务 GeofenceServiceNormal 和 GeofenceServiceFast,以及它们如何与 Fused Location API 交互.
我最终得到了两个服务类(以避免 requestLocationUpdates 和 removeLocationUpdates 冲突)。每个服务都会识别何时必须更改为其他服务(请参阅 handleActionChangeToFastUpdates 和 handleActionChangeToNormalUpdates);然后它为自己调用 removeLocationUpdates,并为其他服务类调用 requestLocationUpdates。这项服务对我来说效果很好 - 也许您可以使用类似的结构。
关于Android Fused Location API - 如何在一个应用程序中使用 PRIORITY_BALANCED_POWER_ACCURACY 和 PRIORITY_HIGH_ACCURACY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723564/