.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 GPS 关



如果GPS关闭,是否可以从网络获取位置?

我的演示可以从网络和GPS获取当前用户位置,但前提是GPS处于打开状态。

如果我尝试从LastKnownLocation获取位置,我也得到null。

@Override
protected void onResume() {
super.onResume();

if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
startActivity(new Intent(MainActivity.this, Permissions.class));
return;
}

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
isGPS = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetwork = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!isGPS && !isNetwork) {
Log.d("TAG", "gps and network false");

}else {
if (isGPS) {
loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc != null) {
Log.i("TAG", "gps loc found");}
}
if (isNetwork) {
loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (loc != null) {
Log.i("TAG", "network loc found");
}
}

我已经在下面测试了这段代码。 如果我关闭设备-gps,它也返回位置空: GPSTracker.java

如果您尝试从网络请求位置作为 GPS 的回退,则需要启用ACCESS_COARSE_LOCATION。此外,即使启用了该权限,您也必须请求位置更新,以刷新和更新最后一个网络位置。只有在那之后,您才会拥有最后一个已知位置可用,否则,您确实会得到 null。

为了使您的代码正常工作,您可能只需要在行之前调用您的GPSTracker.getLocation()getSystemService(Context.LOCATION_SERVICE);

您可以在此处查看getLastKnownLocation文档: https://developer.android.com/reference/android/location/LocationManager#getLastKnownLocation(java.lang.String)

从给定提供程序获取最后一个已知位置,如果存在,则为 null 没有最后一个已知位置。返回的位置可能很旧 在某些情况下,因此位置的年龄应始终为 检查。

这将永远不会激活传感器来计算新位置,并且只会 返回缓存的位置。

最新更新