我正在使用Fused Location Provider开发应用程序。我有个疑问。为了定期获取位置,它使用requestLocationUpdates()。但是从哪个来源获取WIFI或GPS或网络的位置。在我的应用程序中,仅当WiFi处于开启状态时,它才会定期获取位置。当WiFi处于关闭状态时,它无法获得该位置(它应该从GPS或网络的其他来源获得位置。但它永远不会获得位置。或者我必须为GPS和网络编写听众)。我不知道是什么问题。任何人都可以帮助我。
并且,它是否仅适用于所有提供商(Wifi,GPS,网络)或其他。
public void checkPlay(){
int resp = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resp == ConnectionResult.SUCCESS) {
locationClient = new LocationClient(this, this, this);
locationClient.connect();
} else {
Toast.makeText(this, "Google Play Service Error " + resp,
Toast.LENGTH_LONG).show();
}
}
public void onConnected(Bundle arg0) {
// TODO Auto-generated method stub
if (locationClient != null && locationClient.isConnected()) {
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(100);
locationClient.requestLocationUpdates(locationRequest, this);
}
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
try {
if (location != null) {
lat = location.getLatitude();
long = location.getLongitude();
}
} catch (Exception e) {
Log.d(Fots.TAG,
"GpsTrackService.mGpsLocationListener.onLocationChanged", e);
}
}
答案 0 :(得分:6)
Fused API提供3个位置提供程序。
HIGH_ACCURACY模式使用所有位置提供商,但是,它优先考虑位置提供商,并包括GPS和位置提供商。定位精度大约在10米范围内。
BALANCED_POWER模式将GPS列为其位置提供商列表,并使用其他提供商,包括手机信号塔,wifi等。在这种情况下,位置精度约为40米。
NO_POWER不使用任何位置提供程序,而是从其他应用程序获取位置的被动模式。准确度可能是一英里或更长。它完全基于最近其他应用程序获取的位置。
答案 1 :(得分:2)
如果您在示例中使用PRIORITY_HIGH_ACCURACY,它将使用所有可用的来源(wifi,单元格,gps和内部传感器)。如果你关闭wifi并且在室内,你可能无法获得gps锁定(通常gps在室内不起作用,除非在某些区域,当你靠近窗户时)。如果wifi,单元格和gps不可用(因为它们在设置中关闭或者在您的特定位置不可用),它将不会返回位置(仅内部传感器不足以创建从头开始的位置。
答案 2 :(得分:2)
如果您在室内,GPS可能无法正常工作。所以它将回归到wifi /三角测量。