android 如何获取连接的Wifi SSID

nlejzf6q  于 2022-12-02  发布在  Android
关注(0)|答案(1)|浏览(271)

我需要采取连接WiFi的SSID,首先我尝试了这个:

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiInfo = wifiManager.connectionInfo
textField.text = wifiInfo.ssid

但是wifiInfo.ssid在使用API 30或小米Redmi Note 8 Pro(Android 11)的模拟器上测试时返回<unknown ssid>,就像在使用API 27的模拟器中wifiInfo.ssid返回正确的SSID一样。
然后我试了这个

val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val request = NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .build()
val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
        super.onCapabilitiesChanged(network, networkCapabilities)
        //wifiInfo = networkCapabilities.transportInfo as WifiInfo
        Log.d("%%%", "onCapabilitiesChanged: ${networkCapabilities.transportInfo}")
    }
}
connectivityManager.requestNetwork(request, networkCallback)
connectivityManager.registerNetworkCallback(request, networkCallback)

但是总是
编辑:

清单文件中的权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

OnCreate()中请求位置权限:

ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1)

而且这件事成功地授与了。
求解1:
我只是忘了在我的手机上的Geolocation)它解决了问题,而我使用第一个方法采取wifiinfi的wifiManager.connectionInfo,但当我使用第二个networkCapabilities.transportInfo它仍然返回null,因为第一个方法是Deprecated in java可能是不好的使用它。
那么,我很乐意听听你对第二种方法的意见。

xvw2m8pv

xvw2m8pv1#

Google认为知道ssid就意味着知道位置。
去获得良好的位置许可,你会看到。

相关问题