3

クラスWifiManager(StartScan)でいくつかのアクセスポイントをスキャンしようとしています。このスキャンはタッチイベントで発生しますが、タッチごとに1回スキャンするだけです。問題は、このプロセスを10、20、または必要な回数だけ行う必要があることです。しかし、どうすればこれができるのかわかりません。サイクル用に1つあれば十分だと思ったのですが、この方法ではうまくいきません。

これは私のonTouchメソッドであり、画面に触れるたびに10回繰り返す必要があります

public boolean onTouch(View v, MotionEvent event) { 
// TODO Auto-generated method stub 
WifiManager w = (WifiManager) getSystemService(Context.WIFI_SERVICE);
texto.setLength(0); 
switch (event.getAction()){ 
case MotionEvent.ACTION_DOWN:
texto.append("down"; posx:(double) event.getX(); posy:(double) event.getY();    
w.startScan(); 
break;
}
return false; 
}

次のサイクルで試しましたが、うまくいきませんでした

for(int i=1;i <= 10;i++){ 
w.startScan();
}
4

2 に答える 2

1

スキャンをリクエストしてから、BroadcastReceiverで結果を待つ必要があります。次のようになります。

        BroadcastReceiver receiver_aps = new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context c, Intent intent) 
            {
               List<WifiConfiguration> results = wifiManager.getConfiguredNetworks();
               List<ScanResult> scanResults = wifiManager.getScanResults();   
            }
        };

        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(receiver_aps,filter);  

スキャンが終了したら、カウンターを保持したまま(BroadcastReceiverで)スキャンを再度要求して、10回だけ実行するようにすることができます。

現在のコードは、最初のスキャンを完了するのにかかる時間内に10回のスキャンを要求しているため、後続のスキャン要求はすべて無視されます。

于 2012-10-30T18:32:45.357 に答える
0

スキャンは、完了するまでに長い時間がかかるコマンドです。スキャン中、他のスキャンコマンドは無視されます。

scanはプローブを送信し、すべての2.4GHzおよび5GHzチャネルで(一度に1つずつ)応答を待ちます。
スキャンを10回続けて発行する必要があるのはなぜですか?

于 2012-10-30T18:21:01.177 に答える