Android Fused Location API - 如何在一个应用程序中使用 PRIORITY_BALANCED_POWER_ACCURACY 和 PRIORITY_HIGH_ACCURACY?

标签 android permissions gps google-play-services location-client

Android Fused Location API - 如何在一个应用程序中使用 PRIORITY_BALANCED_POWER_ACCURACYPRIORITY_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_ACCURACYPRIORITY_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/

相关文章:

android - 如何确保android使用默认字体?

未找到声称字符串的 Android Studio 构建依赖项

php - 通过 PHP 保护用于动态绘制可视化效果的 csv 文件

android - 来自适配器的 OnResquestPermissionResult

javascript - 根据大致地理位置查找感兴趣的地方

Android MediaStore.Images.Media.insertImage 只有在使用相机应用拍照后才能在 KitKat 上运行

android - 在一个编辑文本的文本更改监听器上调用 android 中的 web 服务并填充另一个编辑文本

javascript - Facebook api 权限范围问题

android - 将位置放在用户周围一定半径的 map 上 - android

ios - 在 iPhone 中获取错误的 GPS 位置