Tal*_*nel 26 gps android android-location google-play-services location-services
这是我注册我的应用程序以接收位置更新的方式:
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(Consts.ONE_MINUTE * 10);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setFastestInterval(Consts.ONE_MINUTE);
Builder builder = new GoogleApiClient.Builder(context);
builder.addApi(ActivityRecognition.API);
mGoogleApiClient = builder.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
....
....
@Override
public void onConnected(Bundle connectionHint) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationUpdatespendingInent);
}
Run Code Online (Sandbox Code Playgroud)
我的待处理意图几乎在确切的请求间隔内在后台调用了......
到现在为止还挺好.
问题: 当WIFI被禁用/未连接到任何网络,或者没有启用3G/4G网络数据时 - 融合位置提供商不提供新的位置更新!!
我的位置访问设置已打开,并且会检查GPS卫星和WI-FI以及移动网络位置.
在更严重的问题:有时候在这种情况下,我通过悬而未决的意图接收位置更新回调,但最后的位置就知道(即使是一个小时前,和我在很久很久不见了远离那个地方英里)
根据以下文件PRIORITY_BALANCED_POWER_ACCURACY:
与setPriority(int)一起使用以请求"块"级别的准确性.块级精度被认为是大约100米的精度.使用诸如此类的粗略精度通常会消耗更少的功率.
我期待融合位置提供商在没有其他选择的情况下打开GPS,或者如果他没有任何选择,至少不会提供新的位置更新.
另一个不可预测和令人不安的问题:
我改变了PRIORITY_BALANCED_POWER_ACCURACY对PRIORITY_HIGH_ACCURACY中才能看到它的行为(24小时).所有间隔保持不变(更新之间间隔10分钟).即使在没有网络/ SIM卡的手机中也确实收到了准确的位置,但是 - 电池耗尽快!当我查看电池历史时,我惊讶地发现GPS无线电一直处于全传输模式! 我还在我的日志中看到每分钟收到一个位置,即使我每十分钟请求一次位置(我没有任何其他安装的应用程序打开GPS接收位置..)
我注意到在多个设备上(如摩托X 2013,HTC One X的,Nexus 5的)这种行为,所有最新的谷歌播放服务(版本6.1.11),以及Android 4.4.4奇巧
我的应用程序很大程度上取决于用户当前位置,并且只要用户登录,就会在指定的时间间隔内定期接收位置更新,因此我不想使用该PRIORITY_HIGH_ACCURACY模式,以防止电池耗尽.
我的问题:
是融合位置提供商,如果它设置为接收更新PRIORITY_BALANCED_POWER_ACCURACY并且没有任何WI-FI或手机信息塔信息,则假设完全使用GPS ?
如果确实如此,那么我做错了什么?
为什么我得到这个误导性的位置更新不正确?(正如我在"更大问题"一节中所解释的那样..
为什么GPS无线电一直打开而不是在我使用PRIORITY_HIGH_ACCURACY参数时打开10分钟?(我没有其他安装的应用程序可以更快地触发位置更新..)
Par*_*rth 19
对于指定的问题,
1.如果融合位置提供商设置为接收更新PRIORITY_BALANCED_POWER_ACCURACY并且没有任何WI-FI或手机信息塔信息,那么它是否可以使用GPS?&
2.如果确实如此,那么我做错了什么?
显然,在文档中的任何位置都没有指定明确的唯一源.使用任一PRIORITY选项,即使通过代码,获得的"来源" location也是"融合的".
[ location.getProvider()返回:"融合"]
我看到GPS仅在LocationRequest具有PRIORITY_HIGH_ACCURACY时使用.所以它在其他条件下不使用GPS.
4.当我使用PRIORITY_HIGH_ACCURACY参数时,为什么GPS无线电始终打开而不是在10分钟间隔内打开?(我没有其他安装的应用程序可以更快地触发位置更新..)
最快的间隔设置为1分钟.根据我的理解,当最快间隔的值的持续时间短于setInterval的值时,setFastestInterval优先于setInterval.
在你的情况下,1分钟对10.
关于没有其他安装的应用程序触发位置更新,它只是作为一个例子给出,并没有明确指定只有这种情况.
这可以控制应用程序接收位置更新的最快速率,在某些情况下可能比setInterval(long)更快(例如,如果其他应用程序正在触发位置更新).
因此,会发生什么PRIORITY_HIGH_ACCURACY,它location通过使用GPS(专门的类型)以最快的间隔设置 - 1分钟请求.
3.为什么我得到这个误导性的位置更新不正确?(正如我在"更大问题"一节中所解释的那样..
还需要检查pendingIntent机制代码.虽然可能需要注意以下几点:
您可以添加一个location.getTime()以确保并验证获取位置的时间.如果在范围内没有wifi单元塔并且PRIORITY_BALANCED_POWER_ACCURACY被使用,很可能它没有被更新.
第一个位置的块级准确度,在调用"lastKnown"时使用将无济于事.
电池消耗是因为GPS和1分钟更新的结合.尝试将最快间隔设置为5或10分钟,如果这适合您的实施,但PRIORITY_BALANCED_POWER如果您需要绝对准确的位置可能无济于事.我通常会添加一个检查位置,onLocationChanged并根据该位置检查,在LocationRequest中切换优先级.它肯定有助于获得一个位置,除非我在一个没有视线的建筑物内部,而且无线网络已经关闭.
| 归档时间: |
|
| 查看次数: |
18365 次 |
| 最近记录: |