看板 AndroidDev 關於我們 聯絡資訊
要用別的執行緒下去跑,讓他一直抓資料 但不同執行緒沒辦法去動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