Google Glass Wifi扫描

时间:2013-11-04 20:57:32

标签: android google-glass

我目前正在处理将在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

1 个答案:

答案 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>

这也是我的代码的输出。 enter image description here