Android開發3g、wap、net的區別

1.經過CMNET能夠得到徹底的Internet訪問權,能夠訪問pop和imap等衆多互聯網服務; html

2.經過CMWAP只能訪問網頁,沒法訪問pop和imap等衆多互聯網服務。 java

(1) 爲何會有兩個接入點?
  在國際上,一般只有一種GPRS接入方式,爲何在中國會有CMWAP和CMNET兩兄弟呢?(彩信之因此單獨配置接入點是由於彩信服務須要鏈接專用的服務器,在這裏不做探討。)
  其實,CMWAP 和 CMNET 只是中國移動人爲劃分的兩個GPRS接入方式。前者是爲手機WAP上網而設立的,後者則主要是爲PC、筆記本電腦、PDA等利用GPRS上網服務。它們在實現方式上並無任何差異,但由於定位不一樣,因此和CMNET相比,CMWAP便有了部分限制,資費上也存在差異。
linux

(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等局域網網關的功能。這就決定了它在應用上所受到的限制。
android

爲應用程序增長Http協議代理 數據庫

  1. try {  
  2.    String proxyHost = android.net.Proxy.getDefaultHost();  
  3.    if (proxyHost != null) {//若是是wap方式,要加網關  
  4.     java.net.Proxy p = new java.net.Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(  
  5.       android.net.Proxy.getDefaultHost(), android.net.Proxy.getDefaultPort()));  
  6.     conn = (HttpURLConnection) new URL(url).openConnection(p);  
  7.    } else {  
  8.     conn = (HttpURLConnection) new URL(url).openConnection();  
  9.    }  


(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地址是: ide

取得所有的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地址。


移動網絡的判斷:

  1. / 注意二:    
  2.           // 判斷是否電信wap:    
  3.           //不要經過getExtraInfo獲取接入點名稱來判斷類型,    
  4.           // 由於經過目前電信多種機型測試發現接入點名稱大都爲#777或者null,    
  5.           // 電信機器wap接入點中要比移動聯通wap接入點多設置一個用戶名和密碼,    
  6.           // 因此能夠經過這個進行判斷!    
  7.   
  8.           final Cursor c = mContext.getContentResolver().query(    
  9.               PREFERRED_APN_URI, nullnullnullnull);    
  10.           if (c != null) {    
  11.             c.moveToFirst();    
  12.             final String user = c.getString(c    
  13.                 .getColumnIndex("user"));    
  14.             if (!TextUtils.isEmpty(user)) {    
  15.               Log.i("",    
  16.                   "=====================>代理:"    
  17.                       + c.getString(c    
  18.                           .getColumnIndex("proxy")));    
  19.               if (user.startsWith(CTWAP)) {    
  20.                 Log.i("""=====================>電信wap網絡");    
  21.                 return TYPE_CT_WAP;    
  22.               }    
  23.             }    
  24.           }    
  25.           c.close();    
  26.                
  27.                
  28.           // 注意三:    
  29.           // 判斷是移動聯通wap:    
  30.           // 其實還有一種方法經過getString(c.getColumnIndex("proxy")獲取代理ip    
  31.           //來判斷接入點,10.0.0.172就是移動聯通wap,10.0.0.200就是電信wap,但在    
  32.           //實際開發中並非全部機器都能獲取到接入點代理信息,例如魅族M9 (2.2)等...    
  33.           // 因此採用getExtraInfo獲取接入點名字進行判斷    
  34.                
  35.           String netMode = mobNetInfoActivity.getExtraInfo();    
  36.           Log.i("""netMode ================== " + netMode);    
  37.           if (netMode != null) {    
  38.             // 經過apn名稱判斷是不是聯通和移動wap    
  39.             netMode=netMode.toLowerCase();    
  40.             if (netMode.equals(CMWAP) || netMode.equals(WAP_3G)    
  41.                 || netMode.equals(UNIWAP)) {    
  42.               Log.i("""=====================>移動聯通wap網絡");    
  43.               return TYPE_CM_CU_WAP;    
  44.             }    
  45.   
  46.           }    
  47.   
  48.         } 
如何判斷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

相關文章
相關標籤/搜索