作者No (you stay there)
看板AndroidDev
标题Re: [问题] wifimanager scan问题
时间Fri Oct 26 05:23:41 2012
※ 引述《choYM (choYM)》之铭言:
: 大家好
: 最近在写有关抓周围AP的小程式
: 这个程式必须在每1秒取得两次wifi scan的结果 并存起来
因为WiFi扫瞄是Android系统和硬体的行为
不是你一秒扫几次他就回你几次的
: 但是我发现 这两次的scan结果 不管如何 都是一样的
: 我不确定是不是我写法有问题 还是WiFiManager的限制
: 如果改成每1秒扫一次 就不会有这问题==
: 附上程式码片段 请大家帮我看看 谢谢
: String s = "";
: for(int i=0; i<2; i++)//1秒内scan的次数
: s += wifiScan();
: public String scanWifi(){
: String s = "";
: WiFiManager wifiManager = (WifiManager)this.getSystemService(
: Context.WIFI_SERVICE);
: if (!wifiManager.isWifiEnabled())//打开wifi
: wifiManager.setWifiEnabled(true);
: //扫描 将资讯存在list
: wifiManager.startScan();
来看看 WifiManager.startScan()
http://tinyurl.com/5sdrfvr
Request a scan for access points.
Returns immediately.
The availability of the results is made known later by means of
an asynchronous event sent on completion of the scan.
呼叫 WifiManager.startScan() 之後,回传的值为是否呼叫成功
而扫描是非同步进行的,比较可靠的就是用 BroadcastReceiver 去等扫瞄完成的通知
顺带一提,WifiManager.setWifiEnabled(boolean) 也是一样的
不是呼叫後就瞬间开启完成,也是要用 BroadcastReceiver 去等
以下你的程式马上就取回呼叫结果
当扫描还没完成,取到一样的结果的可能是很大的
: List<ScanResult> list = wifiManager.getScanResults();
: //将资讯以字串方式输出
: if(list != null){
: for(int j=0; j<list.size(); j++){
: s += list.get(j).BSSID + "%%" + list.get(j).SSID + "%%" +
: list.get(j).level + "%%" +
: list.get(j).frequency + "%%" +
: list.get(j).capabilities + "%%" +
: list.get(j).describeContents() + "\r\n";
: }
: s+="-\r\n";
: }
: return s;
: }
关键部份大概长这样
// 要注册给系统的 BroadcastReceiver
// 当有符合的事件发生时,便会被呼叫
BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// 取得你要的扫描结果
}
};
// 像系统注册,并以 IntentFilter 告诉系统你要接收的事件是什麽
// 也就是 WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
context.registerReceiver(
wifiScanReceiver,
new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
);
// 然後发出扫描需求
wifiManager.startScan();
// 当不需要再接收时,记得取消
context.unregisterReceiver(wifiScanReceiver);
--
如果 BroadcastReceiver 没用过或不熟
就先看一下他的原理吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.165.176.207
1F:推 choYM:我有找到相关的讨论 谢谢你~~我再来好好研究研究!! 10/27 10:55