在访问网络前, 需要对网络类型进行判断, 是wifi 还是apn, 如果是APN 需要检查是否有设置代理,下面是简单实现:
private Context context;
/**
* 检查网络类型
* @return
*/
public boolean checkNet(Context cnx) {
this.context = cnx;
boolean isWIFI = isWIFIConnection();
boolean isMOBILE = isMOBILEConnection();
if (isMOBILE) {
readAPN();
}
if (!isWIFI && !isMOBILE) {
return false;
}
return true;
}
/**
* 读取APN设置,得到设置的代理地址和端口号
*/
private void readAPN() {
ContentResolver resolver = context.getContentResolver();
Uri uri = Uri.parse("content://telephony/carriers/apn");
Cursor cursor = resolver.query(uri, null, null, null, null);
if (cursor.moveToFirst()) {
GlobalParams.PORT = cursor.getColumnIndex("proxy");
GlobalParams.PORT = cursor.getColumnIndex("port");
}
}
/**
* 判断是否是mobile链接
* @return
*/
private boolean isMOBILEConnection() {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (networkInfo != null) {
return networkInfo.isConnected();
}
return false;
}
/**
* 判断是否是wifi链接
* @return
*/
private boolean isWIFIConnection() {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (networkInfo != null) {
return networkInfo.isConnected();
}
return false;
}