Android Scan для сетей Wifi - PullRequest
       20

Android Scan для сетей Wifi

5 голосов
/ 05 июня 2010

Я пытаюсь найти беспроводные сети и нашел этот полезный источник в сети. К сожалению, это не работает, и я понятия не имею, почему. Моя проблема в том, что я не могу ждать 10 минут для результата - они нужны мне в течение нескольких секунд, и я подумал о том, чтобы установить булеву переменную, ожидающую false, как только я получу результат ... ну, он работает вечно Похоже, ничего не получено. Любая идея ? Спасибо.

// -- Sample WiFi implementation - http://groups.google.com/group/android-developers/browse_thread/thread/f722d5f90cfae69
        IntentFilter i = new IntentFilter();
        i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
            registerReceiver(new BroadcastReceiver(){
                @Override
                public void onReceive(Context c, Intent i){
                    // Code to execute when SCAN_RESULTS_AVAILABLE_ACTION event occurs
                    mWifiManager = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
                    wireless =  mWifiManager.getScanResults(); // Returns a <list> of scanResults
                    waiting = false;
                }
            }
        ,i);
        // -- End Wifi Sample 


        mWifiManager.startScan();


        while (waiting)  { 
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Log.d("PROJECT1","Wifi WAITING");
        }

Ответы [ 5 ]

10 голосов
/ 11 августа 2010

вам необходимо реализовать прослушивание BroadcastReceiver для результатов сканирования, возвращаемых с WifiManager.startScan(). onReceive(), что позволяет вам напрямую получать результаты сканирования. сканирование занимает около 1 секунды и запускает onReceive() ...

4 голосов
/ 06 июня 2010

Где вы положили этот код?В onCreate действия?

Проблема в том, что вы регистрируете обратный вызов, который будет вызываться при получении результатов сканирования, что в соответствии с документами API Android выполняется в отдельном потоке, поэтому ваш цикл ожидания ожидания ничего не дает в этих обстоятельствах, кроме ненужной остановки вашей активности, и если это происходит во время onCreate, это означает, что он никогда не выходит из метода.

3 голосов
/ 06 июня 2010

Хорошо, я нашел ошибку.

Это был цикл.Похоже, что функция onReceive никогда не вызывается, поскольку действие запускает только этот цикл.Похоже, что программе нужно дойти до конца функции, чтобы выполнить другую функцию, например OnReceive ...

Спасибо за помощь в любом случае.Это помогло мне немного улучшить его:)

3 голосов
/ 06 июня 2010

Ну, я ничего не знаю о том, как ускорить процесс, может случиться так, что потребуется некоторое время, чтобы найти сигналы Wi-Fi (или ваш Wi-Fi не включен ... это то, что ваша программа должна проверить до того как начнется). Однако одна вещь, которую вы можете сделать для улучшения вашего рабочего процесса, - это сделать все это в другом действии, используя startActivityForResult (). Таким образом, ваше «основное» действие сможет воздействовать на эти данные после того, как оно будет выполнено, и вам не придется загружать процессор в цикле while.

public void onActivityResult(....){
   switch(retCode){
   case SCAN_ACTIVITY:{
         //do stuff
      }
   }
}
0 голосов
/ 09 ноября 2014

Вы должны написать BroadcastReceiver так:

  1. Зарегистрируйся
  2. Затем запустите сканирование и сделайте так

    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
    
    super.onReceive(context, intent);           
    //Scan is ok, just need few seconds!
    }
    
...