android11没有获取到NETWORK_PROVIDER
时间: 2024-09-11 20:09:49 浏览: 90
Android 11 对于定位服务的获取机制进行了一些调整。在 Android 11 及以上版本,系统对后台应用访问位置信息施加了更严格的限制。默认情况下,对于非前台应用,Google Play 的政策要求应用必须使用 `ACCESS_FINE_LOCATION` 或 `ACCESS_COARSE_LOCATION` 权限来获取位置信息。如果你的应用是从 Android 11 或更高版本的设备上获取位置信息,而没有获取到 `NETWORK_PROVIDER` 的位置更新,可能是因为 `NETWORK_PROVIDER` 在 Android 11 中已被弃用。
如果你的应用依赖于网络位置提供者,你可以改用 Fused Location Provider API,这是 Google 推荐的方式。Fused Location Provider API 会自动选择最佳的位置源(如 GPS 和网络),以提供更准确和快速的位置信息。它还能智能地管理设备的电源使用,因为当位置信息不是必需的时候,它会减少位置更新的频率。
要使用 Fused Location Provider,你需要在应用的 `AndroidManifest.xml` 文件中添加必要的权限:
```xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
```
然后,使用 Google Play 服务的 `FusedLocationProviderClient` 来请求位置更新:
```java
FusedLocationProviderClient locationClient = LocationServices.getFusedLocationProviderClient(context);
locationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
```
在这里,`locationRequest` 是你设置的位置请求参数,`locationCallback` 是位置更新的回调。
阅读全文