Android GPS networkProvider 不工作
Android GPS networkProvider not working
在我的应用程序中,我尝试使用 networkProvider 搜索 android 设备的粗略位置。我只在我的位置管理器中使用 networkProvider,但如果我不打开 GPS 传感器,它将无法工作。
无论 GPS 传感器是开还是关,网络供应商都应该给出一个粗略的位置吗?
这是我的代码。
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
if(isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
Log.e("Network","suc");
else
Log.e("Network", "fail");
if (!isNetworkEnabled) {
} else {
this.isGetLocation = true;
if (isNetworkEnabled) {
Log.e("GpsInfo", "isNetworkEnabled true");
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
Log.e("GpsInfoClass", "Location manager not NULL");
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
lat = location.getLatitude();
lon = location.getLongitude();
Log.e("GpsInfoClass", lon + ", " + lat );
}else{
Log.e("GpsInfoClass", "Location NULL");
}
}else{
Log.e("GpsInfo", "Location Manager is null");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
在我的日志中,它打印 Network(tag) fail(log)。
这是什么意思,
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
总是 returns false,如果 GPS 传感器关闭。为什么会这样?关于获取粗略位置,我错过了什么?
GPS 传感器只需要精确定位。如果您创建一个 Criteria
并将其提供给 locationManager,系统会自动选择最佳提供者并尝试获取坐标。
示例;
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria locationMode = new Criteria();
locationMode.setBearingRequired(false);
locationMode.setSpeedRequired(true);
locationMode.setAccuracy(Criteria.ACCURACY_MEDIUM);
locationManager.requestSingleUpdate(locationMode, new LocationListener() {@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}, null);
}
Is the networkprovider supposed to give a coarse location no matter the GPS sensor is on or off?
不,GPS 收音机与获取网络位置无关。
但是,您需要将位置设置设置为 Power Saving
或 High Accuracy
。
使用此代码显示包含当前已启用提供程序的 Toast:
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Toast.makeText(context, "GPS Enabled: " + isGpsEnabled + " Network Location Enabled: " + isNetworkEnabled, Toast.LENGTH_LONG).show();
这是 GPS only
和 Power Saving
的显示内容:
所以,你可以看到这个调用:
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Returns false 对于仅 GPS 设置,因为这会禁用网络位置。
而且,它 return 对于节能设置是正确的。
对于高精度,它也 return 正确,因为这会同时启用 GPS 和网络定位。
在我的应用程序中,我尝试使用 networkProvider 搜索 android 设备的粗略位置。我只在我的位置管理器中使用 networkProvider,但如果我不打开 GPS 传感器,它将无法工作。
无论 GPS 传感器是开还是关,网络供应商都应该给出一个粗略的位置吗?
这是我的代码。
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
if(isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
Log.e("Network","suc");
else
Log.e("Network", "fail");
if (!isNetworkEnabled) {
} else {
this.isGetLocation = true;
if (isNetworkEnabled) {
Log.e("GpsInfo", "isNetworkEnabled true");
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
Log.e("GpsInfoClass", "Location manager not NULL");
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
lat = location.getLatitude();
lon = location.getLongitude();
Log.e("GpsInfoClass", lon + ", " + lat );
}else{
Log.e("GpsInfoClass", "Location NULL");
}
}else{
Log.e("GpsInfo", "Location Manager is null");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
在我的日志中,它打印 Network(tag) fail(log)。
这是什么意思,
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
总是 returns false,如果 GPS 传感器关闭。为什么会这样?关于获取粗略位置,我错过了什么?
GPS 传感器只需要精确定位。如果您创建一个 Criteria
并将其提供给 locationManager,系统会自动选择最佳提供者并尝试获取坐标。
示例;
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria locationMode = new Criteria();
locationMode.setBearingRequired(false);
locationMode.setSpeedRequired(true);
locationMode.setAccuracy(Criteria.ACCURACY_MEDIUM);
locationManager.requestSingleUpdate(locationMode, new LocationListener() {@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}, null);
}
Is the networkprovider supposed to give a coarse location no matter the GPS sensor is on or off?
不,GPS 收音机与获取网络位置无关。
但是,您需要将位置设置设置为 Power Saving
或 High Accuracy
。
使用此代码显示包含当前已启用提供程序的 Toast:
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Toast.makeText(context, "GPS Enabled: " + isGpsEnabled + " Network Location Enabled: " + isNetworkEnabled, Toast.LENGTH_LONG).show();
这是 GPS only
和 Power Saving
的显示内容:
所以,你可以看到这个调用:
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Returns false 对于仅 GPS 设置,因为这会禁用网络位置。 而且,它 return 对于节能设置是正确的。
对于高精度,它也 return 正确,因为这会同时启用 GPS 和网络定位。