2014-02-19 64 views
0

我有一個代碼告訴我來自wifi的信號強度。現在,我希望它應該每5秒刷新一次並告訴我新的信號強度。信號強度不會每隔幾秒刷新

  1. 它給出了一組信號強度5次,每次它給我相同的信號強度。我不知道爲什麼。

  2. 一旦安裝在我的android設備上,它就會給我信號強度,它與信號強度的答案在第一次安裝時相同。所以,無論何時我在Android設備上運行應用程序,我都會得到相同的答案。

的代碼是:

我得到DBM答案。

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();獲取最近更新的掃描結果。這些不會立即更新。你需要打一個電話(你這樣做)來註冊一個接收器來監聽wifi信號的變化。每當信號強度發生變化時,接收機的onReceive方法將自動被調用 - 因此您不需要一遍又一遍地調用Runnable。

只是處理所有的代碼List<ScanResult> wifiScanList = mainWifiObj.getScanResults();,以後在WifiScanReceiveronReceive方法,並在onResume註冊這個接收器,並在註銷它。

您還可以通過查看Android設備上的WiFi設置應用程序的源代碼獲得幫助,該應用程序可用here