Android应用程序访问互联网资源时,在Wifi的情况下处理网络连接按照上文所讲述的方法步骤即可顺利实现;但如果当前Android设备的联网方式是通过移动运营商的网络服务为中转,间接访问的互联网资源时,则就涉及到在创建HTTP链接之前需要设置Proxy,即可尽量避免网络中断访问的情况,顺利访问互联网。

        Proxy中文即代理。已经插入手机卡的Android设备,点击"设置"→"无线和网络"→"移动网络设置"→"接入点名称",任意点击一接入点,此时显示的内容即为当前运营商为使Android设备通过运营商网络顺利接入互联网而需要设置的代理信息。

        通常,中国移动的接入点为CMWAP,代理IP是10.0.0.172,端口为80。

        由于不同运营商其代理设置的不同,为保证代码的一致性及有效性,开发过程中需要封装出能够自适应各种不同Proxy环境并且能够顺利访问互联网的联网代码。

        封装后的方法为openUrl(),代码如下:

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


更多相关文章

  1. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruC
  2. Android 中判断网络连接和GPS是否可用及HTTPCLIENT使用
  3. Android源代码是这样搞到的(图解)
  4. Android代码混淆防反编译解决方案研究
  5. Android 自定义对话框去除白色边框代码
  6. 【Android】Android Studio使用gradle导出jar包并混淆代码
  7. Android里面编写退出主程序的提示代码
  8. android源代码在线查看
  9. Android 网络请求库Retrofit简单使用

随机推荐

  1. Android之使用Android-query框架进行开发
  2. AndroidGPS定位详解 (4)
  3. android编译问题,如何控制make编译hdpi,mdp
  4. RelativeLayout的布局学习(部分知识点)
  5. android-wifi-tether - Wireless Tether
  6. Android(安卓)实例及组件
  7. Android开源项目和web在线查看
  8. tools:context=”.MainActivity”与xmlns
  9. 不使用webview,用手机浏览器的android ap
  10. android中将txt文件保存到SD卡中