当 gps 关闭时,.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 总是返回 false?

Posted

技术标签:

【中文标题】当 gps 关闭时,.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 总是返回 false?【英文标题】:.isProviderEnabled(LocationManager.NETWORK_PROVIDER) returns always false when gps is off? 【发布时间】:2021-03-04 07:21:41 【问题描述】:

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

我的演示可以从 NETWORK 和 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");


我在下面测试了这段代码。如果我关闭 device-gps,它也会返回位置 null : GPSTracker.java

【问题讨论】:

您可以将代码发布到您检索位置的位置吗?另外,这里可能有类似的问题:***.com/questions/20210565/… 我已经更新了代码,向您展示了我如何检索 loc。 我已经测试过这个 GPSTracker。如果 gps 关闭,它也会返回 null:GPSTracker.java 【参考方案1】:

如果您尝试从网络请求位置作为 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 不是最后一个已知位置。返回的位置可能在 在某些情况下,因此位置的年龄应始终为 检查。

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

【讨论】:

以上是关于当 gps 关闭时,.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 总是返回 false?的主要内容,如果未能解决你的问题,请参考以下文章

CLLocationmanager 中的 GPS 位置更新

Gps 位置图标未关闭

定位服务 GPS 强制关闭

打开和关闭GPS时的地理定位问题

即使gps关闭,有啥方法可以获取位置更新

Android:检测 GPS 何时打开/关闭(或当没有应用程序不再使用它时)