私は周囲のアクセスポイントをスキャンする必要があるアプリケーションを作成しており、結果に応じていくつかの計算が行われます。ここまでで、新しいスキャンを開始するにもかかわらず、WifiManager.statScan()
メソッドが、新しいスキャンの結果を自動的に返さないと確信しています。ボタンを押すたびに、Androidの携帯電話で新しいスキャン結果を受け取る方法はありますか?
これは私のコードです:
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
//do some reseting for the GUI and the values of the problem.
break;
case R.id.button2:
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
List<ScanResult> scanResult = null;
if(wifiManager.startScan()){
scanResult = wifiManager.getScanResults();
}
// Do the calculations.
break;
}
}
私の問題は、このコードを使用した場合、私は私が実際に開始したスキャンの結果や結果は、前回のスキャンから取得し確認していないということであり、後者は、ある場合には正しい、新しいスキャンの結果を得るにはどうすればいいですか?
ありがとうございました。
次のように様々な投稿やtutoriasを検索して読んだ後、私のコードは、変換されています:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
BroadcastReceiver receiver;
private List<ScanResult> scanResult;
boolean waiting;
// and other irrelevant variables.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialization of the elements of the GUI
reset.setOnClickListener(this);
locate.setOnClickListener(this);
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
waiting = true;
receiver = new WifiScaner(this);
registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
// resetting the variables of the application
break;
case R.id.button2:
wifiManager.startScan();
while (waiting) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("PROJECT1","Wifi WAITING");
}
//Calculations
break;
}
}
public class WifiScaner extends BroadcastReceiver{
MainActivity main;
public WifiScaner(MainActivity main){
super();
this.main = main;
}
public void onReceive(Context c, Intent intent) {
scanResult = main.wifiManager.getScanResults();
waiting = false;
Log.d("PROJECT1","Wifi RECEIVED");
}
}
} しかし、私がWifiScanerのonReceiveに入ることはないと思われるいくつかの理由のために。なぜこれが起こっているのか?
はい私はチュートリアルからアイディアを得ましたが、スキャン結果を受け取るためにどのように待つことができますか?アプリケーションを実行すると、リストにはまだ何も入っていないので、クラッシュします。 – user2149122
リスナーが起動するまでリストを処理しないでください。 –