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或者有线就会出现这种极端的情况,目前Android SDK还不能识别这种情况,一般的解决办法就是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
36
|
/* @author suncat
* @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 ;
}
|