3

プログラムでWiFiネットワークに接続したいと思います。

これが私のコードです:

wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);

WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + ssid + "\"";
config.preSharedKey = "\""+ key +"\"";

int netId = wifiManager.addNetwork(config);
wifiManager.saveConfiguration();
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();

携帯電話でwifiを有効にすると、期待どおりに機能しますが、問題は、wifiが無効になっている場合です。この場合、唯一の結果は wifi アダプターを有効にすることですが、ネットワークには接続しません。有効化に時間がかかるようで、接続されません。私にとってもう1つの奇妙なことは、wifiManager.getConfiguredNetworks()nullを返すことです。それを修正する方法を知っていますか?

ありがとうございました

4

2 に答える 2

5

有効化に時間がかかるようで、接続されません。

はい。これは、ネットワークの有効化が非同期に行われ、並行して行われ、すぐには行われないためです。あなたの問題に対する2つの可能な解決策は次のとおりです。

1) これは最も簡単な解決策ですが、最善ではありません。別のユーザーが説明したように、スキャン結果が入ってくることを確認してループします。ただし、ループの各サイクルの間に何らかのスリープを追加する必要があります。IE では、すべての CPU リソースを食い尽くさないように、1 ミリ秒待機する必要があります。頭の上からAndroidでこれを行う方法がわかりません。この方法には別の問題があります。u が GUI スレッドにいる場合、接続が確立されるのを待つため、この方法ですべての GUI イベントをブロックします。

2) これは適切な解決策です。ネットワーク接続が確立された後、ブロードキャスト イベントに登録できます。その後、終了時にイベントを取得します。このイベントから、必要な操作の実行を完了することができます。

急ぎの回答で申し訳ありません。私は Android のプロではないので、これを行う方法の詳細を頭の中で説明することはできませんが、少なくとも正しい方向に向けることができると思いました.

于 2013-04-23T16:15:32.570 に答える
-1

実際、WiFi を複数回接続すると、問題は解決します。

WiFi が有効になっていて、特定の WiFi ネットワークに接続している場合に表示されるもう 1 つのことは、機能していることです。

もう1つ、モバイルネットワークから特定のWiFiネットワークに切り替えると、接続が不安定になります..この問題のために、特定のWiFiネットワークを介してWiFiに接続し、3秒後にネットワークを忘れて再び接続します. その後、正常に動作します。

このコードを使用してWiFiに接続します。

そして、遅延とWiFiネットワークの取得には、このコードを使用します........

{ 
   wifi(SSID,PASS); 
   final Handler handler = new Handler();
   handler.postDelayed( 
       new Runnable() 
       { 
          Override public void run() { forgot(); } 
       }, 3000); 
   final Handler handler1 = new Handler();
   handler1.postDelayed(
       new Runnable() 
       {
          Override public void run() {wifi(SSID,PASS); } 
       }, 3000);
} 
于 2016-11-26T06:21:05.760 に答える