本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢!
本篇文章将要讲述的是在项目开发中如何选择手机通信渠道,这所谓的通信就是指手机终端与服务器的数据交换,而渠道指的就是手机终端与服务器进行数据交换的方式。
以Android项目开发为例,Android中可以使用的通信工具大概有以下几种:HttpUrlConnection、HttpClient、Socket等。但是是不是这些工具都可以应用于所有的渠道呢?
手机的通信渠道有以下几种:
1、WLAN:无线网络渠道,比如说wifi,当手机利用这种渠道方式上网,就会直接请求服务器。
2、APN:手机apn接入点,就是基站,而这种接入点方式大概有两种:
a) wap方式:这是一种地域性的渠道方式,主要用于增值业务,比如说中国移动的代理ip是10.0.0.172,端口是80,电信端口是200,。这种方式上网,经过wap网关(代理)的时候,运营商首先会拦截,过滤掉用户的请求,然后再转向真实的资源服务器。比平常的方式多了步骤,也就降低了上网的速度。走wap网关并不是所有的通信工具都是可以的。HttpUrlConnection貌似是不行的,网络稳定性非常的差。如果说在手机上网时候使用wap方式,就需要在代码中配置。
b)Net方式,这种方式直接请求服务器。
下面展示代码如何选择通信渠道。
首先判断走的是哪种通信渠道?是wifi还是apn,apn中的wap特殊 获取网络类型:WiFi or mobile,判断是哪个apn被选中了,获取apn的代理信息 public static boolean checkNet(Context context) { // 判断:WIFI链接 boolean isWIFI = isWIFIConnection(context); // 判断:Mobile链接 boolean isMOBILE = isMOBILEConnection(context); // 如果Mobile在链接,判断是哪个APN被选中了 if (isMOBILE) { // APN被选中,的代理信息是否有内容,如果有wap方式 readAPN(context);// 判断是哪个APN被选中了 } if (!isWIFI && !isMOBILE) { return false; } return true; } /** * APN被选中,的代理信息是否有内容,如果有wap方式 * * @param context */ private static void readAPN(Context context) { Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");//4.0模拟器屏蔽掉该权限 // 操作联系人类似 ContentResolver resolver = context.getContentResolver(); // 判断是哪个APN被选中了 Cursor cursor = resolver.query(PREFERRED_APN_URI, null, null, null, null); if(cursor!=null&&cursor.moveToFirst()){ GlobalParams.PROXY=cursor.getString(cursor.getColumnIndex("proxy")); GlobalParams.PORT=cursor.getInt(cursor.getColumnIndex("port")); } }
HttpClient中:设置代理信息 public HttpClientUtil() { client = new DefaultHttpClient(); // 判断是否需要设置代理信息 if (StringUtils.isNotBlank(GlobalParams.PROXY)) { // 设置代理信息 HttpHost host = new HttpHost(GlobalParams.PROXY, GlobalParams.PORT); client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, host); } }
时间: 2024-10-10 22:04:09