3

我目前正在开发一个将在 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 对象中报告的强度级别。

在安卓上运行

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

在玻璃上跑步

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
4

1 回答 1

2

这是我用于扫描 wifi 连接并将它们显示在 Google glass 上的列表中的代码。如果 wifi 关闭,则自动打开。当您手动关闭 wifi 时也会自动更改。另外请在清单中提及所需的权限.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>

这也是我的代码的输出。 在此处输入图像描述

于 2013-12-16T08:24:57.803 回答