判断网络连接(仅仅只是连接):
//todo 网络
public boolean net = true;
public boolean isNetworkAvailable(Activity activity) {
Context context = activity.getApplicationContext();
// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (int i = 0; i < networkInfo.length; i++) {
System.out.println(i + "===状态===" + networkInfo[i].getState());
System.out.println(i + "===类型===" + networkInfo[i].getTypeName());
// 判断当前网络状态是否为连接状态
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
// return true;
// return false;
return net;
}
}
}
}
return false;
}
场景(手机开了热点但关联数据流量)
具体连接的网络到底有没有网无法直接查证
解决思路找一个稳定的域名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;
}
实现定时检查网络状态
//todo 网络检测
private Runnable checkNet = new Runnable() {
@Override
public void run() {
handler.removeCallbacks(checkNet);
if (isNetworkAvailable(UseSmileActivity.this) && ping()) {
Log.e("", "有网络");
readSQLite(1);
net = true;
if (dbOrders.size() > 0) {
Log.e(TAG, "有离线订单");
offLineOrder();
}
} else {
net = false;
Log.e("", "没网络");
}
handler.postDelayed(checkNet, 6000);
}
};
弊端:ping三下还是有点慢,但非常稳妥