作者LaPass (LaPass)
看板AndroidDev
標題Re: [問題] 讓WIFI一直連續掃描SSID後顯示?
時間Wed Oct 5 08:56:05 2011
要用別的執行緒下去跑,讓他一直抓資料
但不同執行緒沒辦法去動TEXTVIEW之類的UI元件
所以要用Handler或是runOnUiThread();
Runnable r = new Runnable()
{
@Override
public void run()
{
// TODO 你要做的事
}
};
方法1 (有辦法取得UI執行緒的Handler時):
Handler h = new Handler();
h.postDelayed(r,10000);
方法2 (在不同執行緒中時):
new Thread(new Runnable()
{
@Override
public void run()
{
SystemClock.sleep(10000);
runOnUiThread(r);
}
}).start();
※ 引述《paladin90974 (芭樂丁パラディン)》之銘言:
: 各位鄉民晚安
: 小弟想要做一個功能
: 就是讓手機一直呈掃描AP的狀態
: 然後取得資訊後顯示在TEXTVIEW上
: 接著蒐集某個AP的info.level資訊後自動平均
: 我的認知是,只要WIFI功能有打開應該就會不停的掃描AP資訊
: 但是現在的成果是抓完後就會先顯示目前抓到的,然後顯示完之後就停了
: 大概要等個10-15秒才會再動.
: 我有試著調整過AP釋放電波的間隔,但是沒有用
: 抓現成的APP來測試人家是做得到一秒刷一次的,但是不知道怎麼做...
: 這瓶頸好卡啊...
: 片段程式碼:
↓用if比較好,不然會有可能會沒有回應
: while(results.hasNext()) {
: ScanResult info = results.next();
: String wifiInfo = "名稱: " + info.SSID + " ; Rssi = " + info.level + "dBm";
: Log.v("WiFi", wifiInfo);
: String ssid01 = info.SSID;
: fullInfo += wifiInfo + "\n";
: int RA = info.level;
: if(ssid01.equals("rssitest")){ //如果抓到指定AP就拿來平均
: i=i+1;
: RA = RA + info.level;
: RA = RA / i;
: rainfo += ssid01 + " ; RssiAvg = " + RA + "dBm" + "\n";
: RssAvg.setText(rainfo);
: };
: status.setText(fullInfo);
: }
: 不知道是其實有抓但是顯示沒刷新,或是程式碼根本就沒在跑
: 另外10-15秒重抓也很迷,因為我沒有寫類似的程式碼...
: 我以為用WHILE迴圈就會一直跑,不知道這樣子想對不對
: 最終成果是想要5秒抓5筆資訊然後平均訊號強度
: 請各位鄉民幫小弟解惑@@
: 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.33.58.232
→ paladin90974:喔喔可以了! 非常感謝! 10/05 21:32
推 tomap41017:new Handler(Looper.getMainLooper))就可取得UI 10/06 01:16
→ LaPass:謝謝樓上告知 10/06 07:58