我目前正在处理将在Google Glass设备上安装和运行的原生Android应用程序。此应用程序的要求之一是我主动读取wifi网络的频率和级别信息。
这通常在Android中使用以下行完成:
this.registerReceiver(BROADCAST_RECEIVER_HERE, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
((WifiManager) getSystemService(Context.WIFI_SERVICE)).startScan();
在传统Android设备上运行时,我的广播接收器(由BROADCAST_RECEIVER_HERE占位符指定)每秒接收更新的wifi扫描结果。在Glass上运行相同的应用程序时,结果仍然每秒一次,但实际的wifi级别值似乎每4-5次扫描结果或5-6秒都会改变。
这是为了电池寿命而制造的错误还是有意识的决定?反正我有没有配置WifiManager以便它接收每个扫描结果的更新级别?
修改 以下是一些示例日志。每行包括一个时间戳和两个特定无线网络的ScanResult对象中报告的强度级别。
在Android上运行
16:01:05.864: -43.0 -46.0
16:01:07.185: -43.0 -45.0
16:01:08.520: -49.0 -50.0
16:01:09.841: -48.0 -53.0
16:01:11.161: -48.0 -53.0
16:01:12.489: -47.0 -45.0
16:01:13.810: -45.0 -52.0
16:01:15.192: -51.0 -51.0
16:01:16.497: -45.0 -46.0
16:01:17.833: -45.0 -46.0
在Glass上运行
16:04:14.089: -42.0 -41.0
16:04:15.097: -42.0 -41.0
16:04:16.097: -42.0 -39.0
16:04:17.152: -42.0 -39.0
16:04:18.183: -42.0 -39.0
16:04:19.222: -42.0 -39.0
16:04:20.238: -42.0 -39.0
16:04:21.246: -42.0 -42.0
16:04:22.253: -43.0 -41.0
16:04:23.253: -43.0 -41.0
答案 0 :(得分:2)
以下是我用于扫描wifi连接的代码,并将其显示在Google Glass上的列表中。如果关闭,则自动打开wifi。当您手动关闭wifi时也会自动更改。还请提及所需的权限在manifest.xml中。
public class WifiActivity extends Activity {
TextView mainText;
WifiManager mainWifi;
WifiReceiver receiverWifi;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(cw.glasslife.R.layout.activity_wifi);
mainText = (TextView) findViewById(cw.glasslife.R.id.mainText);
// Initiate wifi service manager
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// Check for wifi is disabled
if (mainWifi.isWifiEnabled() == false)
{
// If wifi disabled then enable it
Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled",
Toast.LENGTH_LONG).show();
mainWifi.setWifiEnabled(true);
}
// wifi scaned value broadcast receiver
receiverWifi = new WifiReceiver();
// Register broadcast receiver
// Broacast receiver will automatically call when number of wifi connections changed
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mainWifi.startScan();
mainText.setText("Starting Scan...");
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}
public boolean onMenuItemSelected(int featureId, MenuItem item) {
mainWifi.startScan();
mainText.setText("Starting Scan");
return super.onMenuItemSelected(featureId, item);
}
protected void onPause() {
unregisterReceiver(receiverWifi);
super.onPause();
}
protected void onResume() {
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
class WifiReceiver extends BroadcastReceiver {
// This method call when number of wifi connections changed
public void onReceive(Context c, Intent intent) {
sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
sb.append("\n Number Of Wifi connections :"+wifiList.size()+"\n\n");
for(int i = 0; i < wifiList.size(); i++){
sb.append(new Integer(i+1).toString() + ". ");
sb.append(wifiList.get(i).SSID);
sb.append("\n\n");
}
mainText.setText(sb);
}
}
}
这是xml文件。 activity_wifi.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/mainText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wifi_connections" />
</LinearLayout>
这也是我的代码的输出。