信号强度每隔几秒钟就不会刷新

时间:2014-02-19 04:38:53

标签: android runnable signal-strength

我有一个代码告诉我来自wifi的信号强度。现在,我希望它应该每5秒更新一次并告诉我新的信号强度。

  1. 它给出一组信号强度5次,每次给它相同的信号强度。我不知道为什么。

  2. 一旦安装在我的Android设备上,它就会给我信号强度,这与首先安装信号强度的答案相同。所以,每当我在Android设备上运行应用程序时,我都会得到相同的答案。

  3. 代码是:

    我在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);
                                }
                        };
        }
    

    请帮帮我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你这一切都错了。

mainWifiObj.getScanResults();获取最新更新的扫描结果。这些都不会立即更新。您需要拨打电话(您这样做)注册接收器以监听wifi信号的变化。每次信号强度发生变化时,都会自动调用接收器的onReceive方法 - 因此您无需反复调用Runnable。

只需处理来自List<ScanResult> wifiScanList = mainWifiObj.getScanResults();的{​​{1}}方法的所有代码,然后在onReceive中注册此接收方,并在WifiScanReceiver中取消注册}。

您还可以查看Android上的WiFi设置应用的源代码,该代码可用here