Android 檢測網絡連接狀態(轉)


轉自:http://blog.csdn.net/sunboy_2050/article/details/7896313

Android連接網絡的時候,並不是每次都能連接到網絡,因此在程序啟動中需要對網絡的狀態進行判斷,如果沒有網絡則提醒用戶進行設置。

首先,要判斷網絡狀態,需要有相應的權限,下面為權限代碼(AndroidManifest.xml):

 

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>

 

然后,檢測網絡狀態是否可用

/** 
 * 對網絡連接狀態進行判斷 
 * @return  true, 可用; false, 不可用 
 */  
private boolean isOpenNetwork() {  
    ConnectivityManager connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  
  NetworkInfo networkInfo =
connManager.getActiveNetworkInfo();

if(networkInfo!= null) {
    //2.獲取當前網絡連接的類型信息
         int  networkType = networkInfo.getType();
         if (ConnectivityManager.TYPE_WIFI == networkType){
         //當前為wifi網絡
      } else   if (ConnectivityManager.TYPE_MOBILE == networkType){
        //當前為mobile網絡
    }
return connManager.getActiveNetworkInfo().isAvailable(); }
 
return false;  
}  

最后,不可用則打開網絡設置

/** 
 * 訪問百度主頁,網絡不可用則需設置 
 */  
private void initMoreGames() {  
    String URL_MOREGAMES = "http://www.baidu.com";  
    mWebView = (WebView) findViewById(R.id.view_gamesort);  
  
    if (mWebView != null) {  
        mWebView.requestFocus();  
        WebSettings webSettings = mWebView.getSettings();  
        if (webSettings != null) {  
            webSettings.setJavaScriptEnabled(true);  
            webSettings.setCacheMode(MODE_PRIVATE);  
            webSettings.setDefaultTextEncodingName("utf-8");  
        }  
  
        // 判斷網絡是否可用  
        if(isOpenNetwork() == true) {  
            mWebView.loadUrl(URL_MOREGAMES);  
        } else {  
            AlertDialog.Builder builder = new AlertDialog.Builder(MoreGamesActivity.this);  
            builder.setTitle("沒有可用的網絡").setMessage("是否對網絡進行設置?");  
              
            builder.setPositiveButton("", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    Intent intent = null;  
                      
                    try {  
                        String sdkVersion = android.os.Build.VERSION.SDK;  
                        if(Integer.valueOf(sdkVersion) > 10) {  
                            intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
                        }else {  
                            intent = new Intent();  
                            ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");  
                            intent.setComponent(comp);  
                            intent.setAction("android.intent.action.VIEW");  
                        }  
                        MoreGamesActivity.this.startActivity(intent);  
                    } catch (Exception e) {  
                        Log.w(TAG, "open network settings failed, please check...");  
                        e.printStackTrace();  
                    }  
                }  
            }).setNegativeButton("", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    dialog.cancel();          
                    finish();  
                }  
            }).show();  
        }  
    } else {  
        Log.w(TAG, "mWebView is null, please check...");  
    }  
}  

 

轉自http://hi.baidu.com/janksenhu/item/a0042347d7161eaedf2a9fa6

 

"MOBILE";//移動數據連接,不能與連接共存,如果wifi打開,則自動關閉

"WIFI";//wifi服務,當激活時,默認情況下,所有的數據流量將使用此連接。

"MOBILE_MMS";//運營商的多媒體消息服務

"MOBILE_SUPL";//平面定位特定移動數據連接

"MOBILE_DUN";//網絡橋接,很老的一個網絡

"MOBILE_HIPRI";//高優先級的移動數據連接。相同的為{TYPE_MOBILE},但路由的設置是不同的。只有請求的進程將有機會獲得移動的DNS服務器。

"WIMAX";//全球互通微波存取數據連接

"BLUETOOTH";//藍牙

"DUMMY";//虛擬連接

"ETHERNET";//以太網 

"MOBILE_FOTA";

"MOBILE_IMS";

"MOBILE_CBS";

"WIFI_P2P";//通過wifi直連wifi


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM