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
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
相关文章推荐
- Android开发3gwap、3gnet登录方式区别
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
- 判断Android系统net和wap接入点的开发实例
- 判断Android系统net和wap接入点的开发实例
- 判断Android系统net和wap接入点的开发实例
- Android WAP NET 区别
- android开发实例01:移动联通电信wap和net接入点判断
- android开发实例01:移动联通电信wap和net接入点判断
- android 手机网络接入点名称及WAP、NET模式的区别
- Android 系统net和wap接入点的区别
- Android 开发 对话框Dialog dismiss和hide方法的区别
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之55---BREW SDK 个版本的区别(上)
- Android开发之判断网络(wifi、3G)是否连接
- 微信wap开发,页面显示元素不全-微信开发(asp.net)
- java.net.SocketTimeoutException: Read timed out 的解决办法 android平台 腾讯微博开发
- android开发之-数据存储Map、HashMap、Hashtable、concurenthashmap区别
- Android开发中的drawable-(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的区别以及联系 还有 什么是XGA,WXGA,WUXGA,和WSXGA+?
- 【转】Android平台开发-3G function porting-3G功能移植
- Android如何检测网络的类型为3G、2G、wap、wifi
- Android开发中的View类的视图属性focusableInTouchMode这个属性跟focusable有什么区别?