簡體   English   中英

如何正確調用處理程序方法以進行延遲?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM