在Android Q / API 29上列出WiFi网络。

15

我目前正在将我的应用迁移到Android Q。 我想列出所有配置的WiFi网络,在Q之前,我可以使用WiFiManager的getConfiguredNetworks函数来实现。不幸的是,这个方法在API级别29上已被弃用,并且在Android Q设备上返回一个空列表。

弃用注释仅适用于我还想连接到这些网络的情况。我不想这样做,我只想列出网络及其名称并获取其内部id。您有任何想法如何在Q中执行此操作吗?


1
文档位于https://developer.android.com/reference/android/net/wifi/WifiManager,上面写道:这个方法已在API级别29中弃用。a)请参阅WifiNetworkSpecifier.Builder#build()获取连接到Wi-Fi网络的新机制。 - Pemba Tamang
1
我不想连接到网络,只是列出所有已配置的网络及其名称。 - Cilenco
1
你是否已经授予位置权限? - Pemba Tamang
能否在API 29上启用wifi?请有人前往 https://dev59.com/R7bna4cB1Zd3GeqPb4HF 进行检查和回答吗? - AdeleGoldberg
请参阅 Android 10 文档中的“限制对配置的 Wi-Fi 网络的直接访问”部分。 - JJD
2个回答

0
我曾经遇到过同样的问题,我的问题是我的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()


所以,这在较新的SDK版本上工作了吗? 因为已经说过它不会在APK Level 29以上起作用。 - theMountainMan

0

我猜在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在无线控制方面变得非常有限。 - TwoFingerRightClick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接