我有一个代码告诉我来自wifi的信号强度。现在,我希望它应该每5秒更新一次并告诉我新的信号强度。
它给出一组信号强度5次,每次给它相同的信号强度。我不知道为什么。
一旦安装在我的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 :(得分:0)
你这一切都错了。
mainWifiObj.getScanResults();
获取最新更新的扫描结果。这些都不会立即更新。您需要拨打电话(您这样做)注册接收器以监听wifi信号的变化。每次信号强度发生变化时,都会自动调用接收器的onReceive
方法 - 因此您无需反复调用Runnable。
只需处理来自List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
的{{1}}方法的所有代码,然后在onReceive
中注册此接收方,并在WifiScanReceiver
中取消注册}。
您还可以查看Android上的WiFi设置应用的源代码,该代码可用here。