25

範囲内のすべてのwifiネットワークを(startScan + SCAN_RESULTS_AVAILABLE_ACTION + getScanResultsを使用して)列挙し、それらのSSIDとBSSIDの値を取得できますが、各ネットワークのセキュリティタイプを判別する方法がわかりません。

私の主な目的では:

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(scanReceiver, intentFilter);
    ((WifiManager)getSystemService(Context.WIFI_SERVICE)).startScan();

私のscanReceiverオブジェクトでは:

public void onReceive(Context c, Intent intent) {
    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())){
        mainObject.scanComplete();
    }
}

そして再び私の主な目的で:

public void scanComplete()
{
    List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults();
    for (ScanResult network : networkList)
    {
        <do stuff>
    }
}

このコードは、scanCompleteが最終的に呼び出される限り機能し、近くのすべてのWi-Fiネットワークを正常に列挙して、SSIDとBSSIDを取得できますが、セキュリティタイプを判別する方法がわかりません。

これを行う方法はありますか?

前もって感謝します。

4

4 に答える 4

25

scanComplete メソッドで ScanResult の機能文字列を解析する必要があります。Android デベロッパー ドキュメントによると、次のようになります。

ScanResult.capabilities は、アクセス ポイントでサポートされている認証、キー管理、および暗号化スキームを記述します。

AccessPointState クラスで利用可能な静的ヘルパー メソッドを利用することができるかもしれません。少なくとも例として利用することもできます。

于 2011-08-10T23:52:41.360 に答える
7

どうもありがとう...あなたは私の一日を作りました...

ここに付け加えたいことがあります。ネットワークをスキャンせずに、現在接続されている wifi 構成情報 (特に暗号化とキー管理) を次のように取得できます。

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<ScanResult> networkList = wifi.getScanResults();
if (networkList != null) {
    for (ScanResult network : networkList)
    {
        String Capabilities =  network.capabilities;        
        Log.w (TAG, network.SSID + " capabilities : " + Capabilities);
    }
}
于 2011-09-05T08:21:20.010 に答える
2

各ネットワークのセキュリティ タイプは、スキャン結果の [機能] 列に表示されます。

したがって、セキュリティ タイプを取得するには、これをコードの一部に追加します。

public void scanComplete()
{
    List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults();
    for (ScanResult network : networkList)
    {
        String Capabilities =  network.capabilities;

        //Then you could add some code to check for a specific security type. 
        if(Capabilities.contains("WPA"))
     {
          // We know there is WPA encryption
         }
        else if(Capabilities.contains("WEP"))
         {
         // We know there is WEP encryption
         }
        else
         { 
         // Another type of security scheme, open wifi, captive portal, etc..
         }

    }
}

とにかく、ここにいくつかの簡単なソースコードがあります。ただし、例外的な応答であり、より完全であるため、Ayjの回答を完全にお勧めします。

于 2011-08-23T04:05:32.847 に答える