【问题标题】:How to check if WiFi exists?如何检查WiFi是否存在?
【发布时间】:2017-09-24 18:45:33
【问题描述】:

如何检查我输入的WiFi名称是否存在于我所在的区域?

这个想法是从 WiFi 网络中获取名称,将它们与我输入的名称进行比较并返回一个布尔值。

这是我使用的代码,它总是返回 false。

wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiReciever = new WifiScanReceiver();
registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiMgr.startScan();


private class WifiScanReceiver extends BroadcastReceiver {
        public void onReceive(Context c, Intent intent) {
            List<ScanResult> wifiScanList = wifiMgr.getScanResults();
            wifis = new String[wifiScanList.size()];

            for (int i = 0; i < wifiScanList.size(); i++) {
                wifis[i] = wifiScanList.get(i).toString();
            }
        }
    }


private boolean doesWifiExist(String string){
        String[] array = string.split(" ");
        String wifi = array[0];

        boolean flag = false;

        for (int i = 0; i < wifis.length; i++) {
            if(wifis[i].equals(wifi)){
                flag = true;
                break;
            }

        }
        return flag;
    }

这是我添加的代码和我使用的清单中的权限

public boolean isInternetPermissionGranted() {
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(Manifest.permission.ACCESS_WIFI_STATE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.v("PermissionGranted", "Permission is granted");
                return true;
            } else {

                Log.v("PermissionGranted", "Permission is revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_WIFI_STATE}, 1);
                return false;
            }
        } else { //permission is automatically granted on sdk<23 upon installation
            Log.v("PermissionGranted", "Permission is granted");
            return true;
        }
    }





<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

【问题讨论】:

    标签: java android wifi android-wifi wifimanager


    【解决方案1】:

    它返回 false 可能是因为 wifiScanList 为空。确保您为较新的 API 明确请求权限,并确保启用了 wifi

    【讨论】:

    • 不可能,因为 WifiScanReciever 中的 for 循环会抛出空指针异常。
    【解决方案2】:

    首先确保你有&lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE"

    另外,我相信如果你在,API >= 23(或者 Marshmallow,如果 api 不同),你需要调用requestPermission(new String[] {Manifest.permission.ACCESS_WIFI_STATE}) 这也可以用于请求多个权限,只需用逗号分隔即可。

    也可以通过调用来检查权限状态 checkSelfPermission(PERMISSION) == PackageManager.PERMISSION_DENIED 其中 PERMISSION 等于您尝试检查的权限。

    【讨论】:

    • 我添加了请求权限的代码,它适用于我拥有的 api 19 设备,但不适用于我拥有的 23 api 设备。我将在编辑中添加代码
    • 它不请求 API>=23?我的经验法则是将权限请求放在第一个Activities onCreate中,立即请求所有需要的权限,应该会弹出wifi请求。
    • 我在onCreate中调用函数
    • Wifi 开启了吗?调试这些行可以说明失败的原因吗?
    • 在我认为它与权限有关之前,我已经打开了 wifi,并且 ACCESS_WIFI_STATE 是一个正常的权限,所以你不必询问用户你只需要在清单中拥有它.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多