zoukankan      html  css  js  c++  java
  • 判断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
  • 相关阅读:
    27. Remove Element
    列表变成字典
    1. Two Sum
    CVPR2019:What and How Well You Performed? A Multitask Learning Approach to Action Quality Assessment
    959. Regions Cut By Slashes
    118. Pascal's Triangle
    loj3117 IOI2017 接线 wiring 题解
    题解 NOI2019 序列
    题解 省选联考2020 组合数问题
    题解 Educational Codeforces Round 90 (Rated for Div. 2) (CF1373)
  • 原文地址:https://www.cnblogs.com/CaptainLin/p/3586294.html
Copyright © 2011-2022 走看看