2

ネットワークのスキャンされたリストからWiFiホットスポットをスキャンして接続できる小さなアプリを開発しようとしています。ただし、オープン ネットワークとセキュア ネットワークの両方について、パスワード プロンプトを作成しました。ネットワークが開いている場合 (事前に知っていることにより)、パスワードを入力せず、テキストを空白のままにして入力すると、接続されます。オープンネットワークのパスワードを要求せず、直接接続できるように、プログラムでオープンで安全なwifiを識別する方法を誰でも教えてもらえますか。(今後、どれがオープンでどれがセキュアなネットワークなのか分からないので、オープンでセキュアなネットワークをSSIDなどから特定する必要があります)

4

3 に答える 3

7

ここには、ネットワーク タイプを識別するために使用される機能フィールドがあります。

WifiManager wifimanger = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    List<ScanResult> networkList = wifimanger.getScanResults();
    if (networkList != null) {
        for (ScanResult network : networkList) {
            String capabilities = network.capabilities;
            Log.w(TAG, network.SSID + " capabilities : " + capabilities);
            if (capabilities.toUpperCase().contains("WEP")) {
                // WEP Network
            } else if (capabilities.toUpperCase().contains("WPA")
                       || capabilities.toUpperCase().contains("WPA2")) {
                // WPA or WPA2 Network
            } else {
                // Open Network
            }
        }
    }
于 2014-09-04T10:19:58.087 に答える
0

今日、私はこの同じ質問に対する答えを探していましたが、ここで指摘された解決策と他の同様の質問で少し不安になりました. また、将来新しいセキュリティ モードが作成される場合は?

今のところ、私は次のようなことをすることを好みます:

public WifiSecurityMode testAgainstSecurityModes(WifiSecurityMode... securities) {
    for (WifiSecurityMode security : securities) {
        if (this.capabilities.toUpperCase().contains(security.getName().toUpperCase())) {
            return security;
        }
    }
    return WifiSecurityMode.UNKNOWN;
}


public enum WifiSecurityMode {

    WEP("WEP"), WPA("WPA"), WPA2("WPA2"),//....
    UNKNOWN ("UNKNOWN");

    private String name;

    WifiSecurityMode (String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

//to use it: (WifiInfo are just a class I create to encapsulate the values in a ScanResult object) 

public List<WifiInfo> getOpenWifis() {
    List<WifiInfo> open = new ArrayList<>();
    for (WifiInfo w : wifiInfoList) {
        if (w.testAgainstSecurityModes(WifiSecurityMode.WEP, WifiSecurityMode.WPA, WifiSecurityMode.WPA2).equals(WifiSecurityMode.UNKNOWN)) {
            open.add(w);
        }
    }
    return open;
}

その後、UNKNOWN return でやりたいことを行います。

将来、新しいセキュリティ モードが作成された場合、testAgainstSecurityModes メソッドを変更する必要はありません。

于 2015-07-30T04:38:15.267 に答える