移動聯通電信wap和net接入點判斷

在android網絡開發中,對接入點判斷是必不可少的,因爲連接網絡的時候如果是wap接入點,需要設置代理。移動聯通wap(代理相同:10.0.0.172:80),電信wap(代理:10.0.0.200:80)
接入點類型:
Net網絡:運營商(移動聯通電信)net網絡,wifi,usb網絡共享 
Wap網絡:移動聯通wap(代理相同:10.0.0.172:80),電信wap(代理:10.0.0.200:80)
這樣看來就可以抽象出三種網絡類型:(1)聯通移動wap(2)電信wap,(3)其他的都是net類型。
還有一些實際項目中需要注意的地方,我已經在代碼中寫註解,分享給大家。
  1. import com.shoowc.R;   
  2. import android.app.Activity;   
  3. import android.content.Context;   
  4. import android.database.Cursor;   
  5. import android.net.ConnectivityManager;   
  6. import android.net.NetworkInfo;   
  7. import android.net.Uri;   
  8. import android.os.Bundle;   
  9. import android.text.TextUtils;   
  10. import android.util.Log;   
  11.   
  12. public class CheckApnTypeActivity extends Activity {   
  13.   /** Called when the activity is first created. */   
  14.   public static final    String CTWAP = "ctwap";   
  15.   public static final    String CMWAP = "cmwap";   
  16.   public static final    String WAP_3G = "3gwap";   
  17.   public static final    String UNIWAP = "uniwap";   
  18.   public static final    int TYPE_NET_WORK_DISABLED = 0;// 網絡不可用   
  19.   public static final    int TYPE_CM_CU_WAP = 4;// 移動聯通wap10.0.0.172   
  20.   public static final    int TYPE_CT_WAP = 5;// 電信wap 10.0.0.200   
  21.   public static final    int TYPE_OTHER_NET = 6;// 電信,移動,聯通,wifi 等net網絡   
  22.   public static Uri PREFERRED_APN_URI = Uri   
  23.   .parse("content://telephony/carriers/preferapn");   
  24.       
  25.       
  26.   @Override   
  27.   public void onCreate(Bundle savedInstanceState) {   
  28.     super.onCreate(savedInstanceState);   
  29.     setContentView(R.layout.main);   
  30.   
  31.     checkNetworkType(this);   
  32.   }   
  33.   
  34.   /***  
  35.     * 判斷Network具體類型(聯通移動wap,電信wap,其他net)  
  36.     *     
  37.     * */   
  38.   public static int checkNetworkType(Context mContext) {   
  39.     try {   
  40.       final ConnectivityManager connectivityManager = (ConnectivityManager) mContext   
  41.           .getSystemService(Context.CONNECTIVITY_SERVICE);   
  42.       final NetworkInfo mobNetInfoActivity = connectivityManager   
  43.           .getActiveNetworkInfo();   
  44.       if (mobNetInfoActivity == null || !mobNetInfoActivity.isAvailable()) {   
  45.            
  46.   
  47.         // 注意一:   
  48.         // NetworkInfo 爲空或者不可以用的時候正常情況應該是當前沒有可用網絡,   
  49.         // 但是有些電信機器,仍可以正常聯網,   
  50.         // 所以當成net網絡處理依然嘗試連接網絡。   
  51.         // (然後在socket中捕捉異常,進行二次判斷與用戶提示)。   
  52.            
  53.            
  54.   
  55.         Log.i("""=====================>無網絡");   
  56.         return TYPE_OTHER_NET;   
  57.       } else {   
  58.   
  59.         // NetworkInfo不爲null開始判斷是網絡類型   
  60.   
  61.         int netType = mobNetInfoActivity.getType();   
  62.         if (netType == ConnectivityManager.TYPE_WIFI) {   
  63.           // wifi net處理   
  64.           Log.i("""=====================>wifi網絡");   
  65.           return TYPE_OTHER_NET;   
  66.         } else if (netType == ConnectivityManager.TYPE_MOBILE) {   
  67.               
  68.   
  69.           // 注意二:   
  70.           // 判斷是否電信wap:   
  71.           //不要通過getExtraInfo獲取接入點名稱來判斷類型,   
  72.           // 因爲通過目前電信多種機型測試發現接入點名稱大都爲#777或者null,   
  73.           // 電信機器wap接入點中要比移動聯通wap接入點多設置一個用戶名和密碼,   
  74.           // 所以可以通過這個進行判斷!   
  75.   
  76.           final Cursor c = mContext.getContentResolver().query(   
  77.               PREFERRED_APN_URI, nullnullnullnull);   
  78.           if (c != null) {   
  79.             c.moveToFirst();   
  80.             final String user = c.getString(c   
  81.                 .getColumnIndex("user"));   
  82.             if (!TextUtils.isEmpty(user)) {   
  83.               Log.i("",   
  84.                   "=====================>代理:"   
  85.                       + c.getString(c   
  86.                           .getColumnIndex("proxy")));   
  87.               if (user.startsWith(CTWAP)) {   
  88.                 Log.i("""=====================>電信wap網絡");   
  89.                 return TYPE_CT_WAP;   
  90.               }   
  91.             }   
  92.           }   
  93.           c.close();   
  94.               
  95.               
  96.           // 注意三:   
  97.           // 判斷是移動聯通wap:   
  98.           // 其實還有一種方法通過getString(c.getColumnIndex("proxy")獲取代理ip   
  99.           //來判斷接入點,10.0.0.172就是移動聯通wap,10.0.0.200就是電信wap,但在   
  100.           //實際開發中並不是所有機器都能獲取到接入點代理信息,例如魅族M9 (2.2)等...   
  101.           // 所以採用getExtraInfo獲取接入點名字進行判斷   
  102.               
  103.           String netMode = mobNetInfoActivity.getExtraInfo();   
  104.           Log.i("""netMode ================== " + netMode);   
  105.           if (netMode != null) {   
  106.             // 通過apn名稱判斷是否是聯通和移動wap   
  107.             netMode=netMode.toLowerCase();   
  108.             if (netMode.equals(CMWAP) || netMode.equals(WAP_3G)   
  109.                 || netMode.equals(UNIWAP)) {   
  110.               Log.i("""=====================>移動聯通wap網絡");   
  111.               return TYPE_CM_CU_WAP;   
  112.             }   
  113.           }   
  114.         }   
  115.       }   
  116.     } catch (Exception ex) {   
  117.       ex.printStackTrace();   
  118.       return TYPE_OTHER_NET;   
  119.     }   
  120.   
  121.     return TYPE_OTHER_NET;   
  122.   }   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章