Android联网主要使用HttpURLConneciton和HttpClient进行联网,在手机联网的时候,我们优先选择wifi网络,其次在选择移动网络,这里所述移动网络主要指cmwap。
大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?
1、HttpURLConnection设置代理
- //当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到10.0.0.172,80端口
- Stringhost=android.net.Proxy.getDefaultHost();//通过andorid.net.Proxy可以获取默认的代理地址
- intport=android.net.Proxy.getDefaultPort();//通过andorid.net.Proxy可以获取默认的代理端口
- SocketAddresssa=newInetSocketAddress(host,port);
- //定义代理,此处的Proxy是源自java.net
- Proxyproxy=newProxy(java.net.Proxy.Type.HTTP,sa);
- URLgetUrl=newURL(“www.baidu.com”);
- HttpURLConnectioncon=(HttpURLConnection)getUrl.openConnection(proxy);//设置代理
2、HttpClient设置代理
- DefaultHttpClienthttpClient=newDefaultHttpClient();
- Stringhost=Proxy.getDefaultHost();//此处Proxy源自android.net
- intport=Proxy.getPort(context);//同上
- HttpHosthttpHost=newHttpHost(host,port);
- //设置代理
- httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
- HttpGethttpGet=newHttpPost("<ahref="http://www.baidu.com">www.baidu.com</a>");
- HttpResponseresponse=httpClient.execute(httpGet);
3、判断手机是否联网
- booleanisConnect(){
- ConnectivityManagercm=(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
- if(cm!=null){
- returntrue;
- }
- returnfalse;
- }
4、判断当前网络是否为WIFI
- booleanisWifi(){
- ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
- if(cm!=null){
- NetworkInfoni=cm.getActiveNetworkInfo();
- if(!ni.getTypeName().equals("WIFI")){
- /*
- *ni.getTypeNmae()可能取值如下
- *WIFI,表示WIFI联网
- *MOBILE,表示GPRS、EGPRS
- *3G网络没有测试过
- *WIFI和(E)GPRS不能共存,如果两个都打开,系统仅支持WIFI
- */
- returntrue;
- }
- }
- returnfalse;
- }
综合判断网络类型,我们便可以确定是否需要设置代理,实现正确的联网。
示例一
- HttpURLConnectioncon=null;
- URLpostUrl=newURL("www.baidu.com");
- booleanisProxy=false;
- //网络检测
- ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
- booleanisProxy=false;
- if(cm!=null){
- NetworkInfoni=cm.getActiveNetworkInfo();
- if(ni!=null){
- if(!ni.getTypeName().equals("WIFI")){
- isProxy=true;
- }
- }
- }
- if(isProxy){
- Proxyproxy=newProxy(java.net.Proxy.Type.HTTP,newInetSocketAddress(android.net.Proxy.getDefaultHost(),android.net.Proxy.getDefaultPort()));
- con=(HttpURLConnection)postUrl.openConnection(proxy);
- }else{
- con=(HttpURLConnection)postUrl.openConnection();
- }
示例二
- DefaultHttpClienthttpClient=newDefaultHttpClient();
- //网络检测
- ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
- if(cm!=null){
- NetworkInfoni=cm.getActiveNetworkInfo();
- if(ni!=null){
- if(!ni.getTypeName().equals("WIFI")){
- //设置代理
- Stringhost=Proxy.getDefaultHost();
- intport=Proxy.getPort(context);
- HttpHosthttpHost=newHttpHost(host,port);
- httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
- }
- }
- }
本文详细介绍了Android中如何配置网络代理,并提供了基于HttpURLConnection和HttpClient的代理设置方法。同时,文章还讲解了如何判断手机当前网络状态,是否需要启用代理以实现正确的网络连接。
1万+

被折叠的 条评论
为什么被折叠?



