2012-12-05 51 views
0

我有一個在啓動時依賴Internet連接的應用程序,我可以檢測到下面的代碼。如何在Android手機上可靠地檢測到互聯網連接喚醒

但是,當手機閒置一段時間,我解鎖它並啓動我的應用程序,它不會立即找到連接,我必須重新啓動應用程序才能獲得成功。

我試過在一個線程中等待,然後重試下面的代碼,但沒有成功。

任何想法將不勝感激,謝謝。

代碼

// check Network/Internet connection 
    public boolean isOnline() { 

    try { 
     ConnectivityManager cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 

     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) { 
       if (ni.isConnected()) { 
        haveConnectedWifi = true; 
       } 
      } 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) { 
       if (ni.isConnected()) { 
        haveConnectedMobile = true; 
       } 
      } 
     } 
     return haveConnectedWifi || haveConnectedMobile; 
    } catch (Exception e) { 
     Log.e(TAG, e.toString()); 
    } 
    return false; 
} 
+0

致電onresume中的方法 – stinepike

回答

1

把你的代碼在你的活動onResume()。這樣,每次您返回活動時都會進行檢查。

此外,添加一個標誌以知道是否檢查連接,並在您的活動的onPause()中將該標誌設置爲true。在onResume()中將其重置爲false。

喜歡的東西:

boolean check; 

    protected void onCreate(Bundle blah) { 
     super(blah); 
     check = true; 
     // whatever else 
    } 

    protected void onResume() { 
     if(check) { 
     isOnline(); 
     // Everything else 

     check = false; 
     } 
     super.onResume(); 
    } 

    protected void onPause() { 
     check = true; 
     super.onPause(); 
    } 

編輯onResume()將不會被調用,除非這個活動..好被收回,所以你只需要添加:

protected void onResume() { 
    isOnline(); 
    // Everything else 
    super.onResume(); 
} 

看看這個從Android dev site流程圖更好地瞭解: enter image description here

+0

爲什麼需要'check','check'時會調用'onResume()'的時候是否爲false? – Sam

+0

不是。 OP要檢查每次活動恢復時間,而不管isOnline()是否最後一次是真實的。 – varevarao

+0

@Sam如果我從這個活動旅行到另一個,然後回到這個活動。 OP剛剛提到關於睡眠後檢查,而不是在活動之間移動(在這種情況下,您的建議立場) **編輯:**織補,只是想'回合它。好點,檢查可能毫無意義。 – varevarao