Android联网主要使用HttpURLConneciton和HttpClient进行联网,在手机联网的时候,我们优先选择wifi网络,其次在选择移动网络,这里所述移动网络主要指cmwap。
大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?
1、HttpURLConnection设置代理
//当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到10.0.0.172,80端口 String host=android.net.Proxy.getDefaultHost();//通过andorid.net.Proxy可以获取默认的代理地址 int port =android.net.Proxy.getDefaultPort();//通过andorid.net.Proxy可以获取默认的代理端口 SocketAddress sa=new InetSocketAddress(host,port); //定义代理,此处的Proxy是源自java.net Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,sa); URL getUrl = new URL(“www.baidu.com”); HttpURLConnection con = (HttpURLConnection) getUrl.openConnection(proxy);//设置代理
2、HttpClient设置代理
DefaultHttpClient httpClient=new DefaultHttpClient(); String host=Proxy.getDefaultHost();//此处Proxy源自android.net int port = Proxy.getPort(context);//同上 HttpHost httpHost = new HttpHost(host, port); //设置代理 httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost); HttpGet httpGet=new HttpPost("www.baidu.com"); HttpResponse response=httpClient.execute(httpGet);
3、判断手机是否联网
boolean isConnect(){ ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); if(cm!=null){ return true; } return false; }
4、判断当前网络是否为WIFI
boolean isWifi(){ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if(cm!=null){ NetworkInfo ni = cm.getActiveNetworkInfo(); if(!ni.getTypeName().equals("WIFI")){ /* * ni.getTypeNmae()可能取值如下 * WIFI,表示WIFI联网 * MOBILE,表示GPRS、EGPRS * 3G网络没有测试过 * WIFI和(E)GPRS不能共存,如果两个都打开,系统仅支持WIFI */ return true; } } return false; }
综合判断网络类型,我们便可以确定是否需要设置代理,实现正确的联网。
示例一
HttpURLConnection con =null; URL postUrl = new URL("www.baidu.com"); boolean isProxy=false; //网络检测 ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); boolean isProxy=false; if(cm!=null){ NetworkInfo ni = cm.getActiveNetworkInfo(); if(ni!=null){ if(! ni.getTypeName().equals("WIFI")){ isProxy=true; } } } if(isProxy){ Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(android.net.Proxy.getDefaultHost(),android.net.Proxy.getDefaultPort())); con = (HttpURLConnection) postUrl.openConnection(proxy); }else{ con = (HttpURLConnection) postUrl.openConnection(); }
示例二
DefaultHttpClient httpClient=new DefaultHttpClient(); //网络检测 ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if(cm!=null){ NetworkInfo ni = cm.getActiveNetworkInfo(); if(ni!=null){ if(!ni.getTypeName().equals("WIFI")){ //设置代理 String host=Proxy.getDefaultHost(); int port = Proxy.getPort(context); HttpHost httpHost = new HttpHost(host, port); httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost); } } }