.isproviderenabled(locationmanager.network\u provider)总是返回false?

qlfbtfca  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(459)

如果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,它也会返回空位置

ct3nt3jp

ct3nt3jp1#

如果您试图从网络请求位置作为对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。在某些情况下,返回的位置可能非常旧,因此应始终检查位置的年龄。
?   这将永远不会激活传感器来计算新的位置,并且只会返回缓存的位置。

相关问题