public static HttpURLConnection openUrl(Context context, String urlStr) {
URL urlURL = null;
HttpURLConnection httpConn = null;
try {
urlURL = new URL(urlStr);
// 需要android.permission.ACCESS_NETWORK_STATE
// 在没有网络的情况下,返回值为null。
NetworkInfo networkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
// 如果是使用的运营商网络
if (networkInfo != null) {
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
// 获取默认代理主机ip
String host = android.net.Proxy.getDefaultHost();
// 获取端口
int port = android.net.Proxy.getDefaultPort();
if (host != null && port != -1) {
// 封装代理連接主机IP与端口号。
InetSocketAddress inetAddress = new InetSocketAddress(host, port);
// 根据URL链接获取代理类型,本链接适用于TYPE.HTTP
java.net.Proxy.Type proxyType = java.net.Proxy.Type.valueOf(urlURL.getProtocol().toUpperCase());
java.net.Proxy javaProxy = new java.net.Proxy(proxyType, inetAddress);
httpConn = (HttpURLConnection) urlURL.openConnection(javaProxy);
} else {
httpConn = (HttpURLConnection) urlURL.openConnection();
}
} else {
httpConn = (HttpURLConnection) urlURL.openConnection();
}
httpConn.setConnectTimeout(Const.NETWORK_OPEN_TIMEOUT);
httpConn.setReadTimeout(Const.NETWORK_READ_TIMEOUT);
httpConn.setDoInput(true);
} else {
// LogOut.out(this, "No Avaiable Network");
}
} catch (NullPointerException npe) {
npe.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return httpConn;
}
android判断2g|3g网络
可以通过ConnectivityManager获取当前网络连接状态,通过状态值判别当前网络连接
NetworkInfo info = conMan.getActiveNetworkInfo();
if(info !=null && info.getType() == ConnectivityManager.TYPE_MOBILE)
{
// NETWORK_TYPE_EVDO_A是电信3G
//NETWORK_TYPE_EVDO_A是中国电信3G的getNetworkType
//NETWORK_TYPE_CDMA电信2G是CDMA
//移动2G卡 + CMCC + 2//type = NETWORK_TYPE_EDGE
//联通的2G经过测试 China Unicom 1 NETWORK_TYPE_GPRS
if(info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS
|| info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA
|| info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE){
System.out.println("mobile connected");
}
else{
System.out.println("type:"+info.getSubtype());
System.out.println("not mobile");
}
}else
System.out.println("not mobile connected");
通过getType的值可以得到以下2g|3g网络