java - 当 gps 关闭时,.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 总是返回 false?
问题描述
如果 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");
}
}
我在下面测试了这段代码。如果我关闭设备-gps,它也会返回位置空值: GPSTracker.java
解决方案
如果您尝试从网络请求位置作为 GPS 的后备,则需要ACCESS_COARSE_LOCATION
启用。此外,即使启用了权限,您也必须请求位置更新,以刷新和更新最后的网络位置。只有在那之后,您才会拥有最后一个已知位置 available,否则,您确实会得到 null 。
为了使您的代码正常工作,您可能只需要GPSTracker.getLocation()
在您的行之前
调用您的getSystemService(Context.LOCATION_SERVICE);
您可以在此处查看文档getLastKnownLocation
:
https://developer.android.com/reference/android/location/LocationManager#getLastKnownLocation(java.lang.String)
从给定提供程序获取最后一个已知位置,如果没有最后一个已知位置,则为 null。在某些情况下,返回的位置可能很旧,因此应始终检查位置的年龄。
这将永远不会激活传感器来计算新位置,并且 只会返回缓存的位置。
推荐阅读
- c++ - 谁能帮我实现在 C++ 中使用 stl list 的程序
- regex - REGEXP_EXTRACT String 以 AG 或 TS 开头,然后捕获所有内容
- python - 如何确保所有用户和所有项目都出现在我的推荐系统的训练集中?
- webapi - 我正在寻找带有文本和音频的励志名言 API。有人可以建议免费使用的 Web API 吗?
- do-while - 每个do while循环都可以转换成for循环吗?
- android - 请求后台权限后,如何在 onRequestPermissionsResult 方法中查看 use 是否只接受了前台权限?
- javascript - Google Charts, AJAX, PHP Problem Encoding JSON Error: Data for arrayToDataTable is not an array
- office-ui-fabric - 是否可以有 2 个相同宽度的堆栈项目的水平堆栈?
- javascript - 在按键事件中使用 jQuery 在 textarea 中设置文本
- oracle - Chainlink Fullfill_alarm()在使用mocha测试成功请求发送到oracle后没有回调