2014-02-22 104 views
0

我試圖從wifi找到信號強度。我想採取5個信號強度的樣本。所以,我保留了一個計時器,它可以幫助我使代碼每秒運行一次。我寫的代碼如下所示。每隔幾秒不刷新的代碼

輸出I得到的是: 獲取調用0

獲取調用1

獲取調用2

獲取調用3

獲取調用4

我沒有得到sb(字符串生成器,我使用的)值。

如果我從onreceive中刪除內容並將其保留在方法外,我將獲得信號強度值。但它並沒有每秒更新。

public class MainActivity extends Activity { 
      protected static final long TIME_DELAY = 1000; 
      TextView mTextView; 

      Handler handler=new Handler(); 
      int count =0; String data =""; 

      private static final IntentFilter FILTER = new IntentFilter(
        WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 

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

       handler.post(updateTextRunnable); 

      } 

     Runnable updateTextRunnable = new Runnable() { 
       public void run() { 
        if (count < 5) { 
         final StringBuilder sb = new StringBuilder(); 

         final WifiManager mainWifiObj; 
         mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);     
         class WifiScanReceiver extends BroadcastReceiver { 
         //BroadcastReceiver WifiScanReceiver = new BroadcastReceiver() { 
          public void onReceive(Context c, Intent intent) { 
           List<ScanResult> wifiScanList = mainWifiObj.getScanResults(); 
           for (ScanResult result : wifiScanList) { 
            if (result.SSID.equals("DAL-WPA2")) { 
             sb.append(""+result.level); 
            } 
            if (result.SSID.equals("DAL")) { 
             sb.append(""+result.level); 
            } 
            if (result.SSID.equals("eduroam")) { 
             sb.append(""+result.level); 
            }        

           } 

          } 
         } 
         WifiScanReceiver wifiReciever = new WifiScanReceiver(); 
         registerReceiver(wifiReciever, new IntentFilter(
           WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
         mTextView.setText("getting called " +count + sb); 
         count++; 
        } else { 
        }    
         //----------------code here to send values to java server--- 
          handler.postDelayed(this, TIME_DELAY); 
          } 
        }; 

我想用的onPause和方法的onResume的,但我想,如果我需要更新代碼,每1-2秒,以獲得新的wifi強度那麼這將是不可行的。

+0

提供更多的代碼或只是擴展你的問題。現在還不清楚應該如何理解。 – RMachnik

+0

@ Rafik991這是整個代碼。我想從wifi獲得信號強度,但我沒有得到它。我想每2秒獲得一次信號強度的答案。 –

回答

0

您應該考慮更清晰和更簡單的解決方案。 有一個簡單的策略來做到這一點。您使用系統ALARM_SERVICE運行服務,並在接收時獲得您的無線信號強度,並且您可以存儲點火計數並僅設置報警服務的次數或五次。 我相信這篇文章會幫助你。 Scheduling stuff... 這可能會更好article