您的位置:首页 > 理论基础 > 计算机网络

Android通过HttpURLConnection与HttpClient联网代理网关设置

2016-06-13 11:40 585 查看
         Android联网主要使用HttpURLConneciton和HttpClient进行联网,在手机联网的时候,我们优先选择wifi网络,其次在选择移动网络,这里所述移动网络主要指cmwap。

大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?

1、HttpURLConnection设置代理

[java] view
plain copy

//当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到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设置代理

[java] view
plain copy

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("<a href="http://www.baidu.com">www.baidu.com</a>");  

HttpResponse response=httpClient.execute(httpGet);  

 

3、判断手机是否联网

[java] view
plain copy

boolean isConnect(){  

    ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);  

    if(cm!=null){  

        return true;  

    }  

    return false;  

}  

4、判断当前网络是否为WIFI

[java] view
plain copy

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;  

}  

 综合判断网络类型,我们便可以确定是否需要设置代理,实现正确的联网。

示例一

[java] view
plain copy

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();  

}  

示例二

[java] view
plain copy

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);  

        }  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 手机