两种方式判断移动运营商


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

/**

 * @author Stay

 *      判断移动运营商

 */

public class NetworkOperater extends Activity {

    private static final String TAG = "MainActivity";

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        ConnectivityManager connec = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        // if (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED)

//      WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

//      NetworkInfo info1 = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

//      if (info1.isConnectedOrConnecting()) {

//          wifiManager.setWifiEnabled(false);

//      }

//      Log.i(TAG,

//              "getDetailedState=" + info1.getDetailedState() +"\n" +

//              "getReason=" + info1.getReason() +"\n" +

//              "getSubtype=" + info1.getSubtype() +"\n" +

//              "getSubtypeName=" + info1.getSubtypeName() +"\n" +

//              "getExtraInfo=" + info1.getExtraInfo() +"\n" +

//              "getTypeName=" + info1.getTypeName() +"\n" +

//              "getType=" + info1.getType()  + "\n"

//      );

//  通过联网方式判断

        NetworkInfo info2 = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        Log.i(TAG,

                "getDetailedState=" + info2.getDetailedState() +"\n" +

                "getReason=" + info2.getReason() +"\n" +

                "getSubtype=" + info2.getSubtype() +"\n" +

                "getSubtypeName=" + info2.getSubtypeName() +"\n" +

                "getExtraInfo=" + info2.getExtraInfo() +"\n" +

                "getTypeName=" + info2.getTypeName() +"\n" +

                "getType=" + info2.getType()

        );

//      通过MNC判断

        TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

        /** 获取SIM卡的IMSI码

         * SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,

         * 储存在SIM卡中,可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家号码,由3位数字组成,

         * 唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成,

         * 用于识别移动客户所归属的移动网络,中国移动为00,中国联通为01,中国电信为03;MSIN为移动客户识别码,采用等长11位数字构成。

         * 唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需取得SIM卡中的MNC字段即可

        */

        String imsi = telManager.getSubscriberId(); 

          "getNetworkOperatorName=" + telManager.getNetworkOperatorName()+"\n" +//直接获取移动运营商名称


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

        if(imsi!=null){ 

            if(imsi.startsWith("46000") || imsi.startsWith("46002") || imsi.startsWith("46007")){//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号 

                //中国移动 

            }else if(imsi.startsWith("46001")){ 

                //中国联通 

            }else if(imsi.startsWith("46003")){ 

                //中国电信 

            

        

    }

    

    /**

     * @author Stay

     *      网络连接方式更改时

     */

    private class ConnectionChangeReceiver  extends BroadcastReceiver{

        @Override

        public void onReceive(Context context, Intent intent) {

            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );  

            NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();  

            NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE );  

            if ( activeNetInfo != null ) {  

                Toast.makeText( context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();  

            }  

            if( mobNetInfo != null ) {  

                Toast.makeText( context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();  

            }  

        }

    }

    

/*联通3G卡  wap連接 

    03-16 16:09:14.754: INFO/MainActivity(977): getDetailedState=CONNECTED

    03-16 16:09:14.754: INFO/MainActivity(977): getReason=apnChanged

    03-16 16:09:14.754: INFO/MainActivity(977): getSubtype=8

    03-16 16:09:14.754: INFO/MainActivity(977): getSubtypeName=HSDPA

    03-16 16:09:14.754: INFO/MainActivity(977): getExtraInfo=uniwap

    03-16 16:09:14.754: INFO/MainActivity(977): getTypeName=mobile

    03-16 16:09:14.754: INFO/MainActivity(977): getType=0

*/

    

    

    /*联通3G卡   3g连接

    03-16 16:13:48.314: INFO/MainActivity(1522): getDetailedState=CONNECTED

    03-16 16:13:48.314: INFO/MainActivity(1522): getReason=apnSwitched

    03-16 16:13:48.314: INFO/MainActivity(1522): getSubtype=3

    03-16 16:13:48.314: INFO/MainActivity(1522): getSubtypeName=UMTS

    03-16 16:13:48.314: INFO/MainActivity(1522): getExtraInfo=3gnet

    03-16 16:13:48.314: INFO/MainActivity(1522): getTypeName=mobile

    03-16 16:13:48.314: INFO/MainActivity(1522): getType=0

*/

    

    /*移动     wap连接

     03-16 16:20:39.295: INFO/MainActivity(734): getDetailedState=CONNECTED

    03-16 16:20:39.295: INFO/MainActivity(734): getReason=apnChanged

    03-16 16:20:39.295: INFO/MainActivity(734): getSubtype=2

    03-16 16:20:39.295: INFO/MainActivity(734): getSubtypeName=EDGE

    03-16 16:20:39.295: INFO/MainActivity(734): getExtraInfo=cmwap

    03-16 16:20:39.295: INFO/MainActivity(734): getTypeName=mobile

    03-16 16:20:39.295: INFO/MainActivity(734): getType=0

     */

    

    /*移动     net连接

    03-16 16:23:34.045: INFO/MainActivity(734): getDetailedState=CONNECTED

    03-16 16:23:34.045: INFO/MainActivity(734): getReason=apnSwitched

    03-16 16:23:34.045: INFO/MainActivity(734): getSubtype=2

    03-16 16:23:34.045: INFO/MainActivity(734): getSubtypeName=EDGE

    03-16 16:23:34.045: INFO/MainActivity(734): getExtraInfo=cmnet

    03-16 16:23:34.045: INFO/MainActivity(734): getTypeName=mobile

    03-16 16:23:34.045: INFO/MainActivity(734): getType=0

    /电信   

    05-25 18:55:30.180: INFO/MainActivity(731): getDetailedState=DISCONNECTED

    05-25 18:55:30.180: INFO/MainActivity(731): getReason=dataDisabled

    05-25 18:55:30.180: INFO/MainActivity(731): getSubtype=6

    05-25 18:55:30.180: INFO/MainActivity(731): getSubtypeName=CDMA - EvDo rev. A

    05-25 18:55:30.180: INFO/MainActivity(731): getExtraInfo=#777

    05-25 18:55:30.180: INFO/MainActivity(731): getTypeName=MOBILE

    05-25 18:55:30.180: INFO/MainActivity(731): getType=0

*/

}

转载:http://www.cnblogs.com/stay/articles/2057948.html

时间: 2024-10-08 06:12:19

两种方式判断移动运营商的相关文章

js判断复合数据类型的两种方式(typeof不奏效了)

js判断复合数据类型的两种方式(typeof不奏效了) 博客分类: Web前端-JS语言核心 JavaScript 作者:zccst typeof认为所有的复合数据类型都是"object",没法进一步细分,所以还得用其他方法 先上结论: 1,(arr && typeof(arr) === "object" && arr.constructor === Array) 2,Object.prototype.toString.call(ar

iOS:创建单例对象的两种方式

单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClassManager*)sharedManager { @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全 { if(singleManager == nil) { singleManager = [[SingleClassManager alloc]init]; } } return

数位dp初步——数位dp的两种方式

数位dp:一类统计区间[L,R]内某种符合规定的数字个数的题目.特征是R的范围会很大,O(N)范围内无法完成. 一般而言,解决这类题目有两种方式,一种是递推,另一种是记忆化搜索. 递推: 1)利用dp求出数组f[i][j](表示有i位,最高位为j的数字中符合要求的数字的个数) 2)根据给出的[L,R],利用f[]统计答案 记忆化搜索: 1 int dfs(int pos,int pre,int lim){//当前位置 前一位的数字 是否有限制 2 if(pos<=0)return 1; 3 if

《连载 | 物联网框架ServerSuperIO教程》- 10持续传输大块数据流的两种方式(如:文件)

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发一套设备驱动,同时支持串口和网络通讯. <连载 | 物联网框架ServerSupe

【REACT NATIVE 系列教程之十三】利用LISTVIEW与TEXTINPUT制作聊天/对话框&&获取组件实例常用的两种方式

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2346.html 本篇Himi来利用ListView和TextInput这两种组件实现对话.聊天框. 首先需要准备的有几点:(组件的学习就不赘述了,简单且官方有文档) 1. 学习下 ListView: 官方示例:http://reactnative.cn/docs/0.27/tutorial.html#content

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)

感谢唯笑志在分享 原博主原地址:http://www.cnblogs.com/lsjwq/ 目       录 10.持续传输大块数据流的两种方式(如:文件)... 2 10.1        概述... 2 10.2        大块数据流的两种传输方式... 2 10.2.1       协议数据包的方式... 2 10.2.2       请求长度.确认的方式... 3 10.3        实现持续传输大块数据... 4 10.3.1       设计请求发送数据协议... 4 10

简介C#读取XML的两种方式

简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询 XML作用 对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企 业可以制定一套自己的数据格式.用于Internet的数据

二分查找算法(递归与非递归两种方式)

首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下所示. /* * 非递归二分查找算法 * 参数:整型数组,需要比较的数. */ public static int binarySearch(Integer[]srcArray,int des){ //第一个位置. int low=0; //最高位置.数组长度-1,因为下标是从0开始的. int h