列出 Android Q / API 29 上的 WiFi 网络

Posted

技术标签:

【中文标题】列出 Android Q / API 29 上的 WiFi 网络【英文标题】:List WiFi networks on Android Q / API 29 【发布时间】:2019-12-16 01:02:52 【问题描述】:

我目前正在将我的应用程序迁移到 android Q。我想列出所有已配置的 WiFi 网络,在 Q 之前,我可以使用 WiFiManager 中的函数 getConfiguredNetworks 来完成此操作。遗憾的是,此方法在 API 级别 29 上已被弃用,并在 Android Q 设备上返回一个空列表。

弃用评论仅指我也想连接到这些网络的情况。我不想这样做,我只想列出网络及其名称并获取其内部id。你有什么想法我应该如何在 Q 中做到这一点?

【问题讨论】:

developer.android.com/reference/android/net/wifi/WifiManager 的文档说此方法在 API 级别 29 中已弃用。a) 请参阅 WifiNetworkSpecifier.Builder#build() 了解触发连接到 Wi-Fi 网络的新机制。 我不想连接到网络,只需列出所有已配置的及其名称 您是否授予了位置权限? 是否可以在 API 29 上启用 wifi?有人可以在***.com/questions/58075918/… 上查看并回答吗? 请参阅 Android 10 文档中的“Restrictions on direct access to configured Wi-Fi networks”。 【参考方案1】:

我想在 Android Q 及更高版本中无法获得配置的 WiFi 网络。唯一的方法是使用getScanResults() 获取当前可用的网络,我知道这实际上并不能解决获取配置的网络名称的问题。而是只获取当前可用的网络。

    List<ScanResult> results = null;
    TextView outputs = (TextView)findViewById(R.id.outputs);
    try
        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        results = wifiManager.getScanResults();
        int len = results.size();
        String res = null;
        for (int i = 0; i < len; i++) 
            res = outputs.getText() + "\n" + results.get(i).SSID;
            outputs.setText(res);

        

    
    catch(Exception e)
    
        Log.e("MainActivity",e.getMessage());
    

目前,他们仅根据其文档提供触发连接到 WiFi 网络的机制。让我们希望有什么事情发生与否

【讨论】:

感谢您澄清没有办法...Android 变得过于沙盒化了。我试图只是通知用户他们已经失去了与特定 wifi 设备的连接。但是 26 位以上的 API 在无线控制方面变得如此有限。【参考方案2】:

我也遇到了同样的问题,我的问题是我的 targetSdkVersion 是 30 !并且函数 getConfiguredNetworks 在 api 29 中已被弃用,当我在 android 9 或以下设备中运行我的应用程序时,效果很好,但是当我在 android 10 中运行我的应用程序时,函数 getConfiguredNetworks 返回 null 或空列表, 我的解决方案是将我的 targetSdkVersion 更改为 28,就像这样

android 
    compileSdkVersion 28
    buildToolsVersion "28.0.0"

    defaultConfig 
        applicationId "asdaadsda"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        
    

参考:https://developer.android.com/reference/android/net/wifi/WifiManager#getConfiguredNetworks()

【讨论】:

以上是关于列出 Android Q / API 29 上的 WiFi 网络的主要内容,如果未能解决你的问题,请参考以下文章

android api 29 上的 adb remount 是不是损坏?

Android 10 API 29(操作系统错误:权限被拒绝,errno = 13)保存文件(颤振)

Android 版本API对应表

Android 版本API对应表

Android 版本API对应表

Android 9上的BiometricManager