您的位置:首页 > 移动开发 > Android开发

Android开发3g、wap、net的区别

2013-11-12 11:38 323 查看
1.通过CMNET可以获得完全的Internet访问权,可以访问pop和imap等众多互联网服务;

2.通过CMWAP只能访问网页,无法访问pop和imap等众多互联网服务。

(1) 为什么会有两个接入点?
  在国际上,通常只有一种GPRS接入方式,为什么在中国会有CMWAP和CMNET两兄弟呢?(彩信之所以单独配置接入点是因为彩信服务需要连接专用的服务器,在这里不作探讨。)
  其实,CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费上也存在差别。

(2) 什么是WAP?
  WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式,不同于一般Internet的“终端+服务器”的工作模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。
  WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。但据我所知,中国移动GPRS网络目前只有唯一的一个WAP网关:10.0.0.172,有中国移动提供,用于WAP浏览(HTTP)服务。有一点需要注意,WAP网关和一般意义上的局域网网关是有差别的,标准的WAP网关仅仅实现了HTTP代理的功能,并未完成路由、NAT等局域网网关的功能。这就决定了它在应用上所受到的限制。

为应用程序增加Http协议代理

try {

String proxyHost = android.net.Proxy.getDefaultHost();

if (proxyHost != null) {//如果是wap方式,要加网关

java.net.Proxy p = new java.net.Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(

android.net.Proxy.getDefaultHost(), android.net.Proxy.getDefaultPort()));

conn = (HttpURLConnection) new URL(url).openConnection(p);

} else {

conn = (HttpURLConnection) new URL(url).openConnection();

}

(3)无论是移动、联通还是电信,都至少提供了两种类型的的APN:WAP方式和NET方式。其中NET方式跟WIFI方式一样,无需任何设置,可自由访问所有类型网站,而WAP方式,需要手机先设置代理服务器和端口号等信息,并且只能访问HTTP协议类型的网站

移动和联通的WAP代理服务器都是10.0.0.172,端口号是80;而电信的WAP代理服务器是10.0.0.200,端口号是80。

Android系统中,对于APN网络的API是隐藏的,因此获取手机的APN设置,需要通过ContentProvider来进行数据库查询,查询的URI地址是:

取得全部的APN列表:content://telephony/carriers;

取得当前设置的APN:content://telephony/carriers/preferapn;

取得current=1的APN:content://telephony/carriers/current;

由于需要设置Proxy的情况为使用运营商网络,所以代码一开始即使用通过Context获得ConnectivityManager,执行ConnectivityManager.getActiveNetworkInfo()获取当前可用的网络。在有可用网络的情况下,判断其类型,如果networkInfo.getType()返回值为ConnectivityManager.TYPE_MOBILE,则需要设置Proxy;在返回值为ConnectivityManager.TYPE_WIFI的情况下则跳过设置Proxy的步骤。

对HttpURLConnection设置Proxy需要指定代理IP及端口号,android.net.Proxy解决了这个问题。执行Proxy.getDefaultHost()和Proxy.getDefaultPort()将返回代理主机的IP及开放端口号,并以这两个信息传参构造InetSocketAddress。InetSocketAddress为IP套接地址,其主要形式可由IP地址与端口号组合而成,亦可用主机域名加端口号组合而成,这种情况下将尝试将主机域名解析为IP地址。

移动网络的判断:

/ 注意二:

// 判断是否电信wap:

//不要通过getExtraInfo获取接入点名称来判断类型,

// 因为通过目前电信多种机型测试发现接入点名称大都为#777或者null,

// 电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码,

// 所以可以通过这个进行判断!

final Cursor c = mContext.getContentResolver().query(

PREFERRED_APN_URI, null, null, null, null);

if (c != null) {

c.moveToFirst();

final String user = c.getString(c

.getColumnIndex("user"));

if (!TextUtils.isEmpty(user)) {

Log.i("",

"=====================>代理:"

+ c.getString(c

.getColumnIndex("proxy")));

if (user.startsWith(CTWAP)) {

Log.i("", "=====================>电信wap网络");

return TYPE_CT_WAP;

}

}

}

c.close();

// 注意三:

// 判断是移动联通wap:

// 其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip

//来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在

//实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等...

// 所以采用getExtraInfo获取接入点名字进行判断

String netMode = mobNetInfoActivity.getExtraInfo();

Log.i("", "netMode ================== " + netMode);

if (netMode != null) {

// 通过apn名称判断是否是联通和移动wap

netMode=netMode.toLowerCase();

if (netMode.equals(CMWAP) || netMode.equals(WAP_3G)

|| netMode.equals(UNIWAP)) {

Log.i("", "=====================>移动联通wap网络");

return TYPE_CM_CU_WAP;

}

}

}

如何判断2G网络和3G网络:待续。。。

参考:http://blog.csdn.net/shichaosong/article/details/8722823
http://www.jizhuomi.com/android/example/32.html http://www.linuxidc.com/Linux/2012-08/67980.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: