Как проверить правильность пароля подключенной сети Wi-Fi? - PullRequest
0 голосов
/ 05 ноября 2018

Когда пользователь подключен к сети Wi-Fi, мне нужно убедиться, что пароль, который пользователь вводит в мое приложение, является правильным. С целью проверки того, что пользователю известен пароль сети, к которой он подключен в данный момент.

Проблема, с которой я сталкиваюсь при попытке подключиться к сети, заключается в том, что wifiManager.addNetwork(conf) всегда возвращает -1 (даже если вы впервые отключаетесь от сети), поскольку сеть уже существует в системе. Поэтому при попытке подключения код ведет себя так же, если введенный пользователем пароль правильный или неправильный.

Идеальным решением является удаление конфигурации сети перед подключением, но это невозможно сделать с Android 6.0.

Это код, который я использовал для проверки:

public void connectFailPassword()
{
    connect("AAAAAAAA", "fail password");
}


public void connectOkPassword()
{
    connect("12345678", "OK password");
}

private void connect(String password, String from) {

    String networkSSID = "MY SSID TO TEST HERE";


    WifiConfiguration conf = new WifiConfiguration();


    conf.SSID = "\"" + networkSSID + "\"";
    conf.preSharedKey = "\"" + password + "\"";

    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    int netId = wifiManager.addNetwork(conf);
    Log.i("TAG",  from + " WifiConnector.connect.id " + netId);

    registerWiFiEventsReceiver();
    //wifiManager.disconnect();
    Boolean enabled = wifiManager.enableNetwork(netId, true);
    Log.i("TAG", from + " WifiConnector.enabled " + enabled);

    //wifiManager.reconnect();



}


private void registerWiFiEventsReceiver() {

    IntentFilter mFilter = new IntentFilter();
    mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    mFilter.addAction(  WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);


    ((Activity) context).registerReceiver(receiver, mFilter);

}


private BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {


        Log.i("TAG", "WifiConnector.receiver: " + getCurrentNetId() + " intent: " + intent.getExtras().toString());


    }

};

Подключиться с помощью пароля:

I/TAG: OK password WifiConnector.connect.id -1
I/TAG: OK password WifiConnector.enabled false
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=368]
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=1432]
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=92]
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=128]

Подключение с неверным паролем:

I/TAG: fail password WifiConnector.connect.id -1
I/TAG: fail password WifiConnector.enabled false
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=368]
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=1432]
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=92]
I/TAG: WifiConnector.receiver: 88 intent: Bundle[mParcelledData.dataSize=128]

Я знаю, что это можно сделать, потому что приложение InstantBridge делает именно это, когда вы добавляете точку доступа Wi-Fi на всех устройствах, даже выше, чем 6.0.

...