判断Android系统net和wap接入点的开发实例

判断Android系统net和wap接入点的开发实例

 

       我们使用Android设备连接网络时,如果是wap接入点就需要设置代理,而电信和移动联通的代理并不相同,移动和联通的wap代理都是 10.0.0.172:80,电信的wap代理是10.0.0.200:80,所以进行Android开发时很有必要判断接入点。

       接入点的类型

       Net网络:运营商(移动联通电信)net网络,wifi,usb网络共享

       Wap网络:移动联通wap(代理相同:10.0.0.172:80),电信wap(代理:10.0.0.200:80)

       这样看来就可以抽象出三种网络类型:联通移动wap,电信wap,其他的都是net类型。

       接入点判断实例

        下面给出了接入点判断的实例代码,其中进行了一些注解,都是一些在实际项目开发中需要注意的地方。分享给大家以供参考。

Java代码
    1. package com.johnson.utils;    
    2. import com.shoowc.R;    
    3. import android.app.Activity;    
    4. import android.content.Context;    
    5. import android.database.Cursor;    
    6. import android.net.ConnectivityManager;    
    7. import android.net.NetworkInfo;    
    8. import android.net.Uri;    
    9. import android.os.Bundle;    
    10. import android.text.TextUtils;    
    11. import android.util.Log;    
    12.   
    13. public class EX01_CheckApnTypeActivity extends Activity {    
    14.   /** Called when the activity is first created. */    
    15.   public static final    String CTWAP = "ctwap";    
    16.   public static final    String CMWAP = "cmwap";    
    17.   public static final    String WAP_3G = "3gwap";    
    18.   public static final    String UNIWAP = "uniwap";    
    19.   public static final    int TYPE_NET_WORK_DISABLED = 0;// 网络不可用    
    20.   public static final    int TYPE_CM_CU_WAP = 4;// 移动联通wap10.0.0.172    
    21.   public static final    int TYPE_CT_WAP = 5;// 电信wap 10.0.0.200    
    22.   public static final    int TYPE_OTHER_NET = 6;// 电信,移动,联通,wifi 等net网络    
    23.   public static Uri PREFERRED_APN_URI = Uri    
    24.   .parse("content://telephony/carriers/preferapn");    
    25.   @Override    
    26.   public void onCreate(Bundle savedInstanceState) {    
    27.     super.onCreate(savedInstanceState);    
    28.     setContentView(R.layout.main);    
    29.   
    30.     checkNetworkType(this);    
    31.   }    
    32.   
    33.   /***   
    34.     * 判断Network具体类型(联通移动wap,电信wap,其他net)   
    35.     *      
    36.     * */    
    37.   public static int checkNetworkType(Context mContext) {    
    38.     try {    
    39.       final ConnectivityManager connectivityManager = (ConnectivityManager) mContext    
    40.           .getSystemService(Context.CONNECTIVITY_SERVICE);    
    41.       final NetworkInfo mobNetInfoActivity = connectivityManager    
    42.           .getActiveNetworkInfo();    
    43.       if (mobNetInfoActivity == null || !mobNetInfoActivity.isAvailable()) {    
    44.             
    45.   
    46.         // 注意一:    
    47.         // NetworkInfo 为空或者不可以用的时候正常情况应该是当前没有可用网络,    
    48.         // 但是有些电信机器,仍可以正常联网,    
    49.         // 所以当成net网络处理依然尝试连接网络。    
    50.         // (然后在socket中捕捉异常,进行二次判断与用户提示)。    
    51.             
    52.         Log.i("""=====================>无网络");    
    53.         return TYPE_OTHER_NET;    
    54.       } else {    
    55.   
    56.         // NetworkInfo不为null开始判断是网络类型    
    57.   
    58.         int netType = mobNetInfoActivity.getType();    
    59.         if (netType == ConnectivityManager.TYPE_WIFI) {    
    60.           // wifi net处理    
    61.           Log.i("""=====================>wifi网络");    
    62.           return TYPE_OTHER_NET;    
    63.         } else if (netType == ConnectivityManager.TYPE_MOBILE) {    
    64.                
    65.   
    66.           // 注意二:    
    67.           // 判断是否电信wap:    
    68.           //不要通过getExtraInfo获取接入点名称来判断类型,    
    69.           // 因为通过目前电信多种机型测试发现接入点名称大都为#777或者null,    
    70.           // 电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码,    
    71.           // 所以可以通过这个进行判断!    
    72.   
    73.           final Cursor c = mContext.getContentResolver().query(    
    74.               PREFERRED_APN_URI, nullnullnullnull);    
    75.           if (c != null) {    
    76.             c.moveToFirst();    
    77.             final String user = c.getString(c    
    78.                 .getColumnIndex("user"));    
    79.             if (!TextUtils.isEmpty(user)) {    
    80.               Log.i("",    
    81.                   "=====================>代理:"    
    82.                       + c.getString(c    
    83.                           .getColumnIndex("proxy")));    
    84.               if (user.startsWith(CTWAP)) {    
    85.                 Log.i("""=====================>电信wap网络");    
    86.                 return TYPE_CT_WAP;    
    87.               }    
    88.             }    
    89.           }    
    90.           c.close();    
    91.                
    92.                
    93.           // 注意三:    
    94.           // 判断是移动联通wap:    
    95.           // 其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip    
    96.           //来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在    
    97.           //实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等...    
    98.           // 所以采用getExtraInfo获取接入点名字进行判断    
    99.                
    100.           String netMode = mobNetInfoActivity.getExtraInfo();    
    101.           Log.i("""netMode ================== " + netMode);    
    102.           if (netMode != null) {    
    103.             // 通过apn名称判断是否是联通和移动wap    
    104.             netMode=netMode.toLowerCase();    
    105.             if (netMode.equals(CMWAP) || netMode.equals(WAP_3G)    
    106.                 || netMode.equals(UNIWAP)) {    
    107.               Log.i("""=====================>移动联通wap网络");    
    108.               return TYPE_CM_CU_WAP;    
    109.             }    
    110.   
    111.           }    
    112.   
    113.         }    
    114.       }    
    115.     } catch (Exception ex) {    
    116.       ex.printStackTrace();    
    117.       return TYPE_OTHER_NET;    
    118.     }    
    119.   
    120.     return TYPE_OTHER_NET;    
    121.   
    122.   }    

life is a jounery,yes
原文地址:https://www.cnblogs.com/CaptainLin/p/3586294.html