当前位置:操作系统 > 安卓/Android >>

android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理

[html]  
  
 
        Android应用程序访问互联网资源时,在Wifi的情况下处理网络连接按照上文所讲述的方法步骤即可顺利实现;但如果当前Android设备的联网方式是通过移动运营商的网络服务为中转,间接访问的互联网资源时,则就涉及到在创建HTTP链接之前需要设置Proxy,即可尽量避免网络中断访问的情况,顺利访问互联网。
 
 Proxy中文即代理。已经插入手机卡的Android设备,点击"设置"→"无线和网络"→"移动网络设置"→"接入点名称",任意点击一接入点,此时显示的内容即为当前运营商为使Android设备通过运营商网络顺利接入互联网而需要设置的代理信息。
 
 
        通常,中国移动的接入点为CMWAP,代理IP是10.0.0.172,端口为80。
 
        由于不同运营商其代理设置的不同,为保证代码的一致性及有效性,开发过程中需要封装出能够自适应各种不同Proxy环境并且能够顺利访问互联网的联网代码。
 
 
        封装后的方法为openUrl(),代码如下:
 
 
[html]  
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;  
}  
 
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();
                // 如果是使用的运营商网络
        &n
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,