2014-02-19 6 views
0

У меня есть код, который говорит мне о силе сигнала от Wi-Fi. Теперь я хотел, чтобы он обновлялся каждые 5 секунд и сообщал мне о новой силе сигнала.Сила сигнала не освежает каждые несколько секунд

  1. Он дает набор силы сигнала 5 раз и каждый раз, когда он дает мне одинаковый уровень сигнала. Я не знаю, почему.

  2. После установки на мое устройство Android оно дает мне силу сигнала, которая совпадает с сигналом силы сигнала, когда он был установлен первым. Поэтому, когда я запускаю приложение на устройстве Android, я получаю тот же ответ.

Код:

я получаю ответ в дБмВт.

public class MainActivity extends Activity { 
      protected static final long TIME_DELAY = 5000; 
      TextView mTextView; 
      Handler handler=new Handler(); 
      int count =0; String data =""; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
       mTextView = (TextView) findViewById(R.id.text_id); 
       handler.post(updateTextRunnable); 

      } 

@Override 
       public void onResume() { 
        super.onResume(); 
        // Register the scan receiver 

        registerReceiver(wifiReciever); 
       } 


       @Override 
       public void onPause() { 
        super.onPause(); 
        // Register the scan receiver 

        unregisterReceiver(wifiReciever); 
       } 

      Runnable updateTextRunnable = new Runnable() { 
       public void run() { 
        if (count < 5) { 
         StringBuilder sb = new StringBuilder(); 
         WifiManager mainWifiObj; 
         mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
         class WifiScanReceiver extends BroadcastReceiver { 
          public void onReceive(Context c, Intent intent) { 

List<ScanResult> wifiScanList = mainWifiObj.getScanResults(); 
         for (ScanResult result : wifiScanList) { 
          if (result.SSID.equals("Khosla ka Ghosla")) { 
           sb.append(""+result.level); 
          } 
          if (result.SSID.equals("panny")) { 
           sb.append(""+result.level); 
          } 
          if (result.SSID.equals("ferbora")) { 
           sb.append(""+result.level); 
          } 
         } 
          } 
         } 
         WifiScanReceiver wifiReciever = new WifiScanReceiver(); 
         registerReceiver(wifiReciever, new IntentFilter(
           WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));     

         count++; mTextView.setText("getting called " +count + sb); 
        } else { 

        }    
         //----------------code here to send values to java server--- 
          handler.postDelayed(this, TIME_DELAY); 
          } 
        }; 
    } 

Пожалуйста, помогите мне. Заранее спасибо.

ответ

0

Вы собираетесь об этом ошибаться.

mainWifiObj.getScanResults(); получает последние обновленные результаты сканирования. Они не обновляются сразу. Вам необходимо сделать вызов (который вы делаете), чтобы зарегистрировать приемник для прослушивания изменений в сигналах Wi-Fi. Метод приемника onReceive будет автоматически вызываться каждый раз, когда изменяется сила сигнала - поэтому вам не нужно снова и снова вызывать ваш Runnable.

Просто обрабатывать весь код из List<ScanResult> wifiScanList = mainWifiObj.getScanResults();, далее в onReceive методом WifiScanReceiver и зарегистрировать этот приемник в onResume и разрегистрировать его в .

Вам также будет полезно ознакомиться с исходным кодом для приложения настроек WiFi на Android, которое доступно here.

Смежные вопросы