wifiManager.getConnectionInfo()与wifiManager.getScanResults()的使用问题
先解释一下:
wifiManager.getConnectionInfo()是用来获取当前已连接上的wifi的信息。
wifiManager.getScanResults()是用来获得手机扫描到的所有wifi的信息。
小弟之前在一个线程里面放置wifiManager.getConnectionInfo()实时获取当前连接的wifi信号强度的信息,用一个textview来实时显示信号强度的变化,这个是实现了的,随着我原理或者靠近路由器,textview上的信号强度是会变化的。
可是后来我试了试把wifiManager.getScanResults()方在线程里面实时显示当前扫描出来的所有无线信号的信号强度变化,可是发现textview中信号强度没有任何变化,只有当我把程序退出再进入后,显示的信号强度就发生了变化,意思就是使用wifiManager.getScanResults()时,屏幕不能实时更新,不知道这是为什么。
Java code?private void obtainWifiInfo() { //显示当前连接的wifi信息(可以实时更新) WifiInfo info; info= wifiManager.getConnectionInfo(); if (info.getBSSID() != null) { // 链接信号强度 double strength = WifiManager.calculateSignalLevel(info.getRssi(), 1001); textview1.setText("强度:"+strength+" "); // Wifi源名称 String ssid = info.getSSID(); textview0.setText("名称:"+ssid+" "); } // 显示扫描到的所有wifi信息(不能实时更新): WifiManager wifiManager= (WifiManager) getSystemService(WIFI_SERVICE); StringBuilder scanBuilder= new StringBuilder(); List<ScanResult> scanResults=wifiManager.getScanResults();//搜索到的设备列表 for (ScanResult scanResult : scanResults) { scanBuilder.append("\n设备名:"+scanResult.SSID +"\n信号强度:"+wifiManager.calculateSignalLevel(scanResult.level,1001)+"\n"); } textview3.setText(scanBuilder); }
Java code?Thread t = new Thread(new Runnable() { public void run() { while(true) { runOnUiThread(new Runnable() { public void run() { obtainWifiInfo(); } }); try{ Thread.sleep(500); }catch(InterruptedException e){ e.printStackTrace(); } } } }); t.start(); }
wifiManager.getConnectionInfo() 如果当做现在时的话,
那么scanresult就是过去时。想取得所有热点的信号,必须挨个取每个热点的当前的wifiinfo。 WifiManager有启动扫描的接口,时间久了不得了,你自己去看看吧