[英]How to properly call handler method for a delay?
我正在開發一個具有內置功能的應用程序,可以連接到Wi-Fi接入點。 用戶在要連接的接入點上輸入密碼后,將執行以下代碼。 我的問題是,即使我的android設備成功連接到AP之后,〜2秒后,if語句仍會運行。 有時它無法連接,但是else語句運行。 我究竟做錯了什么? 有沒有更簡單的方法可以完成我要完成的工作?
final WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (wifiMgr.isWifiEnabled()) {
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
if (wifiInfo.getNetworkId() == -1) {
Log.v("rht", "Problems connecting. Try again.");
Toast.makeText(NetworkScanner.this, "Problems connecting. Try again.", Toast.LENGTH_LONG).show();
}
else {
Log.v("rht", "Successfully Connected.");
}
}
}
}, 4000);
你可以這樣
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 200ms
}
}, 200);
此解決方案僅在UI線程上有用。 否則,在普通線程上,您需要實現不是最佳版本的循環程序。
有關更多信息, 您可以訪問此鏈接
這是初始化處理程序對象
Handler mHandler = new Handler();
mHandler.posttoDealy(run,1000*10) // 10 Sec
調用以運行任務線程
Runnable run = new Runnable() {
@Override
public void run() {
//this will run after ten Sec
//mHandler.posttoDealy(run,1000*10) // 10 Sec for again and again loop
}
})
刪除處理程序
mHandler.removeCallback(run)
使用請求者狀態確實具有吸引力。 由於某些原因,“ wifiInfo.getNetworkId()== -1”給了我意外的結果。 最終,我找到了另一種方法來檢查我的android設備是否已連接到網絡。 非常感謝Donal Rafferty和Armand。 他們都對這個問題做出了貢獻
final WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (wifiMgr.isWifiEnabled()) {
SupplicantState supState;
supState = wifiInfo.getSupplicantState();
if(supState != SupplicantState.COMPLETED) {
Log.v("rht", "Problems connecting. Try again.");
}
else {
Log.v("rht", "Successfully Connected.");
}
}
}
}, 4000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.