Android 判断是否能真正上网

本文介绍在Android应用中如何检测设备的网络连接状态,并通过ping操作判断是否能够访问外网,提供了相应的代码实现。文章还讨论了在连接到局域网或需要输入账号密码的网络时,如何正确判断实际的外网访问能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android里判断是否可以上网,常用的是如下方法:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
  * 检测网络是否连接
  *
  * @return
  */
private boolean isNetworkAvailable() {
     // 得到网络连接信息
     ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
     // 去进行判断网络是否连接
     if (manager.getActiveNetworkInfo() != null ) {
         return manager.getActiveNetworkInfo().isAvailable();
     }
     return false ;
}

 

 

但是,有时候我们连接上一个没有外网连接的WiFi或者需要输入账号和密码才能链接外网的网络,就会出现虽然网络可用,但是外网却不可以访问。针对这种情况,一般的解决办法就是ping一个外网,如果能ping通就说明可以真正上网,代码如下

 

?
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
@author  sichard
      @category  判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网)
      @return
      */ 
     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 ;

 

推推族,免费得门票,游景区:www.tuituizu.com

结伴旅游,一个免费的交友网站:www.jieberu.com

转载于:https://www.cnblogs.com/rabbit-bunny/p/4223143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值