即使授予位置权限,Android 11 wifi SSID 在后台也是未知的

标签 android android-wifi

我在 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 11+ 上具有后台访问的特殊情况。可以授予一个应用程序访问位置权限,但只能在前台。后台位置权限需要在 Play Console 上发布特殊请求,并获得相应的权限:

android.permission.ACCESS_BACKGROUND_LOCATION

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

关于即使授予位置权限,Android 11 wifi SSID 在后台也是未知的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65180052/

相关文章:

android - 我无法解析以下几行 android(/java) 代码

android - 在 Android 6.x (Marshmallow) 中以编程方式设置静态 IP 和网关

android - 如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?

android - 访问 wifi.getScanResults() 中的结果时发生崩溃

java.io.FileNotFoundException :/storage/emulated/0/错误

java - 平无限线?

android - Android M 开发者预览版中的 Volley : org. apache.http 无法解析

java - LoginActivity 在登录期间崩溃

android - 获取可用的 wifi 连接后,以编程方式连接特定的 wifi

android - 检查 Wifi 时出现 java.lang.Securityexception