28

私はwifiを使用しているアプリを開発しています。このアプリでは、ユーザーが選択したスキャンネットワークのパスワードを入力するよう求められます。ユーザーが正しいパスワードを入力すると、接続して正常に動作します。しかし、ユーザーが間違ったパスワードを入力すると、その名前で新しいネットワークが追加され、間違ったパスワードのcosの認証に失敗し、認証の問題のステータスになります。

これで、ユーザーが同じネットワークを再度スキャンして選択し、正しいパスワードを入力しようとすると、以前の接続で認証の問題のステータスが表示されているため、パスワードが正しく、ステータスが無効になっているにもかかわらず、接続に失敗します。

この問題を解決する方法は?ConnectivityManagerまたはwifimanagerを使用してすべてのネットワークを忘れる方法はありますか?または他の解決策はありますか?

4

6 に答える 6

25

はい、removeNetwork()動作します。これを使用して、すべてのネットワークを削除しました。

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
    wifiManager.removeNetwork(i.networkId);
    //wifiManager.saveConfiguration();  
}

wifiManager.saveConfiguration()

このメソッドは API レベル 26 で非推奨になりました。このメソッドを呼び出す必要はありません。

https://developer.android.com/reference/android/net/wifi/WifiManager.html#saveConfiguration()

于 2015-07-17T14:17:45.320 に答える
13

WifiManagerソースコードには、次のメソッドがあります。

/*
 * Delete the network in the supplicant config.
 *
 * This function is used instead of a sequence of removeNetwork()
 * and saveConfiguration().
 *
 * @param config the set of variables that describe the configuration,
 *            contained in a {@link WifiConfiguration} object.
 * @hide
 */

public void forgetNetwork(int netId) {
    if (netId < 0) {
        return;
    }
    mAsyncChannel.sendMessage(CMD_FORGET_NETWORK, netId);
}

ただし、この方法は@hideですので、使用できません。しかし、このコメントによると:

removeNetwork()この関数は、および のシーケンスの代わりに使用されますsaveConfiguration()

代わりに:removeNetwork()を使用してみてください。saveConfiguration()

于 2012-06-21T08:45:33.260 に答える
3

このremoveNetwork()方法を使用して、冗長なネットワーク接続を削除し(それらが同じかどうかは疑問ですがnetId)、接続を新たに追加して、発生している問題を回避できます。

于 2012-06-21T08:40:26.123 に答える