相信很多做安卓开发的同学都遇到过,在开发中需判别网络是否可用,很多通过以下方式判别
/**
* 网络是否可用
*
* @param
* @return
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
但在实际开发中,有时候这种方式并不准确,有时候网络是在线的,但是收不到任何的数据包,这时候就需要真实的判别当前网络是否能真实的收发包来判断网络是否真的畅通。
如何判断,其实安卓提供了一个简单的方式:
private void checkNet() {
new Thread(new Runnable() {
@Override
public void run() {
try {
Process p = null;//m_strForNetAddress是输入的网址或者Ip地址
try {
p = Runtime.getRuntime().exec("ping -c 3 " + Contacts.PING_IP);
int status = p.waitFor(); //status 只能获取是否成功,无法获取更多的信息
Message message = new Message();
message.what = 1;
message.obj = status;
handler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
只要开启一个服务每秒去ping一下ip就可以,拼的ip可以ping百度什么的,比较稳定。