0

Wi-Fi からの信号強度を示すコードがあります。ここで、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);
                            }
                    };
    }

私を助けてください。前もって感謝します。

4

1 に答える 1

0

あなたはこれについてすべて間違っています。

mainWifiObj.getScanResults();最後に更新されたスキャン結果を取得します。これらはすぐには更新されません。wifi信号の変化をリッスンする受信機を登録するには、呼び出しを行う必要があります(これを行います)。レシーバーのonReceiveメソッドは、信号強度が変化するたびに自動的に呼び出されるため、Runnable を何度も呼び出す必要はありません。

のメソッドでList<ScanResult> wifiScanList = mainWifiObj.getScanResults();から以降のすべてのコードを処理し、このレシーバを に登録し、 で登録解除します。onReceiveWifiScanReceiveronResumeonPause

Android の WiFi 設定アプリのソース コードを確認することも役立ちます。こちらから入手できます。

于 2014-02-19T04:48:29.937 に答える