【问题标题】:Android 11 wifi SSID is unknown in background even when lcoation permissions is granted即使授予位置权限,Android 11 wifi SSID 在后台也是未知的
【发布时间】:2021-03-18 15:51:13
【问题描述】:

我在 Android 11 中测试了这段代码

val networkRequest = NetworkRequest.Builder().apply {
    addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
}.build()
        
connectivityManager.registerNetworkCallback(networkRequest, object : ConnectivityManager.NetworkCallback() {
    
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        val wifiName = getCurrentlyConnectedName() ?: return
        val wifiMac = getCurrentlyConnectedMac() ?: return
        Timber.d("WifiStateManager onAvailable() called with: network = [$wifiName]")
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        Timber.d("WifiStateManager onLost() called with: network = [$network]")
    }
})

并注意到一个奇怪的行为。当应用程序在后台时,wifi ssid 始终为<unknown>请注意,位置权限被授予 100%)。当应用程序在前台时,一切正常,我得到正确的wifi ssid

为什么会这样?即使应用在 Android 11 的后台,如何获取 wifi SSID?

【问题讨论】:

  • 我也有同样的问题,没有答案?

标签: android android-wifi


【解决方案1】:

奇怪,这个问题没有早点得到答复。

位置权限现在在 Android 11+ 上具有后台访问的特殊情况。一个应用程序可以被授予访问位置权限,但只能在前台。后台位置权限需要在 Play 管理中心提出特殊请求才能发布并获得相应权限:

android.permission.ACCESS_BACKGROUND_LOCATION

从 API 29 开始,我相信这在 Play 商店中已经是强制性的。

【讨论】:

    【解决方案2】:

    这是 Android 10+(API 29 及更高版本) 上的正确行为,仅声明 ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION 权限是不够的。

    1.对于前景位置:

    您还需要在 Service 中声明 foregroundServiceTypelocation 以使用前台位置。

    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

    或者,如果您的代码在 Activity 中运行,则该 Activity 应该对用户可见。

    2。背景位置:

    正如3c71 所说,您应该在应用的清单中声明ACCESS_BACKGROUND_LOCATION 权限,以便在运行时请求后台位置访问。

    由于 Google Play location policy,它可能会拒绝需要后台位置权限的应用程序。所以,我认为前景位置应该是更好的选择。

    官方文档:https://developer.android.com/training/location/permissions

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 2021-05-25
      • 2022-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2016-06-03
      相关资源
      最近更新 更多