android中检测网络连接状态简单总结

相应几乎没有不跟网络打交道的android应用,那么在实际中就需求检测手机是否有网络连接,甚至需要判断是何种方式连接,这样能给用户带来更好的体验和一些使用指导,下面给出一些常用的判断,如果要知道是否有网络、以及是采用wifi连接的还是3G连接的,调用下面对应方法模型就OK了,代码如下:
TestNetworkActivity:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.home.testnetwork; 
   
import java.util.List; 
   
import android.app.Activity; 
import android.content.Context; 
import android.location.LocationManager; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
   
public class TestNetworkActivity extends Activity implements OnClickListener { 
     private Button checkBtn; 
     private EditText netText; 
     private EditText wifiText; 
     private EditText net3gText; 
     private EditText gpsText; 
   
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
         checkBtn = (Button) findViewById(R.id.main_btn_check); 
         checkBtn.setOnClickListener( this ); 
         wifiText = (EditText) findViewById(R.id.main_et_wifi); 
         net3gText = (EditText) findViewById(R.id.main_et_3g); 
         gpsText = (EditText) findViewById(R.id.main_et_GPS); 
         netText = (EditText) findViewById(R.id.main_et_net); 
    
   
     /**
      * 检测网络是否连接
     
      * @return
      */ 
     private boolean isNetConnected() { 
         ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
         if (cm != null ) { 
             NetworkInfo[] infos = cm.getAllNetworkInfo(); 
             if (infos != null ) { 
                 for (NetworkInfo ni : infos) { 
                     if (ni.isConnected()) { 
                         return true
                    
                
            
        
         return false
    
   
     /**
      * 检测wifi是否连接
     
      * @return
      */ 
     private boolean isWifiConnected() { 
         ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
         if (cm != null ) { 
             NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
             if (networkInfo != null 
                     && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { 
                 return true
            
        
         return false
    
   
     /**
      * 检测3G是否连接
     
      * @return
      */ 
     private boolean is3gConnected() { 
         ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
         if (cm != null ) { 
             NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
             if (networkInfo != null 
                     && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { 
                 return true
            
        
         return false
    
   
     /**
      * 检测GPS是否打开
     
      * @return
      */ 
     private boolean isGpsEnabled() { 
         LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
         List<String> accessibleProviders = lm.getProviders( true ); 
         for (String name : accessibleProviders) { 
             if ( "gps" .equals(name)) { 
                 return true
            
        
         return false
    
   
     @Override 
     public void onClick(View v) { 
         if (v == checkBtn) { 
             netText.setText(isNetConnected() + "" ); 
             wifiText.setText(isWifiConnected() + "" ); 
             net3gText.setText(is3gConnected() + "" ); 
             gpsText.setText(isGpsEnabled() + "" ); 
        
    

 

 
布局xml:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" 
     android:layout_width= "match_parent" 
     android:layout_height= "match_parent" 
     android:orientation= "vertical"
   
     <Button 
         android:id= "@+id/main_btn_check" 
         android:layout_width= "match_parent" 
         android:layout_height= "wrap_content" 
         android:text= "检测网络" /> 
   
     <LinearLayout 
         android:layout_width= "match_parent" 
         android:layout_height= "wrap_content"
   
         <TextView 
             android:layout_width= "wrap_content" 
             android:layout_height= "wrap_content" 
             android:text= "网络是否连接:" /> 
   
         <EditText 
             android:id= "@+id/main_et_net" 
             android:layout_width= "match_parent" 
             android:layout_height= "wrap_content" 
             android:layout_marginLeft= "10dp" 
             android:enabled= "false" /> 
     </LinearLayout> 
   
     <LinearLayout 
         android:layout_width= "match_parent" 
         android:layout_height= "wrap_content"
   
         <TextView 
             android:layout_width= "wrap_content" 
             android:layout_height= "wrap_content" 
             android:text= "wifi是否连接:" /> 
   
         <EditText 
             android:id= "@+id/main_et_wifi" 
             android:layout_width= "match_parent" 
             android:layout_height= "wrap_content" 
             android:layout_marginLeft= "10dp" 
             android:enabled= "false" /> 
     </LinearLayout> 
   
     <LinearLayout 
         android:layout_width= "match_parent" 
         android:layout_height= "wrap_content"
   
         <TextView 
             android:layout_width= "wrap_content" 
             android:layout_height= "wrap_content" 
             android:text= "3G是否连接:" /> 
   
         <EditText 
             android:id= "@+id/main_et_3g" 
             android:layout_width= "match_parent" 
             android:layout_height= "wrap_content" 
             android:layout_marginLeft= "10dp" 
             android:enabled= "false" /> 
     </LinearLayout> 
   
     <LinearLayout 
         android:layout_width= "match_parent" 
         android:layout_height= "wrap_content"
   
         <TextView 
             android:layout_width= "wrap_content" 
             android:layout_height= "wrap_content" 
             android:text= "GPS是否打开:" /> 
   
         <EditText 
             android:id= "@+id/main_et_GPS" 
             android:layout_width= "match_parent" 
             android:layout_height= "wrap_content" 
             android:layout_marginLeft= "10dp" 
             android:enabled= "false" /> 
     </LinearLayout> 
   
</LinearLayout>

有时候我们连接上一个没有外网连接的WiFi或者有线就会出现这种极端的情况,目前Android SDK还不能识别这种情况,一般的解决办法就是ping一个外网。

public static final boolean ping() { 
    	String result = null; 
    	try { 
            	String ip = "www.baidu.com";// ping 的地址,可以换成任何一种可靠的外网 
            	Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次 
            	// 读取ping的内容,可以不加 
            	InputStream input = p.getInputStream(); 
            	BufferedReader in = new BufferedReader(new InputStreamReader(input)); 
            	StringBuffer stringBuffer = new StringBuffer(); 
            	String content = ""; 
            	while ((content = in.readLine()) != null) { 
                    	stringBuffer.append(content); 
            	} 
            	Log.d("------ping-----", "result content : " + stringBuffer.toString()); 
            	// ping的状态 
           	int status = p.waitFor(); 
            	if (status == 0) { 
                    result = "success"; 
                    return true; 
            	} else { 
                    result = "failed"; 
            	} 
    	} catch (IOException e) { 
            result = "IOException"; 
    	} catch (InterruptedException e) { 
            result = "InterruptedException"; 
    	} finally { 
            Log.d("----result---", "result = " + result); 
    	} 
   	return false;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值