Wi-Fiからの信号強度を見つけようとしています。信号強度の 5 つのサンプルを取得したいと考えています。そのため、コードを毎秒実行するのに役立つタイマーを保持しています。私が書いたコードを以下に示します。
私が得る出力は次のとおりです。
呼ばれる 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 メソッドを使用することを考えましたが、新しい Wi-Fi 強度を得るために 1 ~ 2 秒ごとにコードを更新する必要がある場合、それは実現不可能だと思います。