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

时间:2013-09-10 15:52:19

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

Android Fused Location API - 如何在一个应用中使用PRIORITY_BALANCED_POWER_ACCURACYPRIORITY_HIGH_ACCURACY

您好, 我正在开发一个需要定期发送位置更新的应用程序。 我已经使用Fused Location API和locaiton待定意图。 (更新间隔60秒,最小间隔100米)。我已使用PRIORITY_BALANCED_POWER_ACCURACY和意向服务注册了locationclient待定意图。当locaiton发生变化时,IntentService被调用,这对于少数测试驱动器来说效果很好。但这只会有效。如果它不起作用,我希望使用PRIORITY_HIGH_ACCURACY

我注意到当我使用PRIORITY_HIGH_ACCURACY时,它提供了良好的位置,但电池使用率非常高。所以我决定同时使用PRIORITY_HIGH_ACCURACYPRIORITY_BALANCED_POWER_ACCURACY以及ActivityRecognition。

最初程序以PRIORITY_BALANCED_POWER_ACCURACY使用LocationPendingIntent开始,当没有2分钟更新时,我使用LocationListener(和onLocationChanged方法)实现PRIORITY_BALANCED_POWER_ACCURACY,如果仍然没有位置,我调用{{1 }}

我在这里遇到的问题是,一旦切换到PRIORITY_HIGH_ACCURACY,LocationPendingIntent(已在PRIORITY_HIGH_ACCURACY注册)在此之后始终使用PRIORITY_BALANCED_POWER_ACCURACY。我通过调用.removeupdates(locationListener)删除onLocationChanged方法末尾的位置更新;然而GPS图标每分钟都会出现。

我想过为onLocationChanged方法使用静态方法,但我知道这对于Android应用程序来说不是一个好习惯。同时使用PendingIntent和onLocationChanged还有任何已知问题吗?你能建议解决我的问题吗?

权限设置为:

PRIORITY_HIGH_ACCURACY

对此有任何帮助将受到高度赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

(我意识到这是一个非常晚的回应,但刚刚解决了这个问题,也许这些信息对某人有利)。我想做一些非常相似的事情,我有两个问题:

  • 当我使用与我最初请求更新的完全相同的参数时,我发现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。这项服务对我很有用 - 也许你可以使用类似的结构。