我们想获取手机的运营商信息。通常都会去调用系统的TelephonyManager类的取数据。但是很多时候可能取不到卡的信息(例如双卡手机和 一些特殊卡),这样就区别不了运营商了。但是有时候我们的需求要进行不通运营商的差异化定制。这样我们可以根据网络的判断运营商。

核心就是获取可用网络列表,比如你可用网络有cmwap cmnet这样你肯定就是移动的运营商了。当然这样的办法也有不行的时候,所以我们就2套一起来。把网络和获取设备卡的信息整个写成一个接口。至于双卡双 待获取sim卡信息的问题。我马上会整理一篇博客给大家。主要是根据不同的方案商来写不同的接口。

核心代码如下

private void getProviders() {
  NetWorkUtil nwu = new NetWorkUtil(this);
  String net = nwu.getNetWork();
  List<String> infos = nwu.getNetWorkList();
  if (net == null || net.equals("WIFI")) {
   if (infos.size() > 1) {
    infos.remove("WIFI");
    net = infos.get(0);
    if (net.equals("3gwap") || net.equals("uniwap")
      || net.equals("3gnet") || net.equals("uninet")) {
     Constants.MB_ID = 2;
    } else if (net.equals("cmnet") || net.equals("cmwap")) {
     Constants.MB_ID = 1;
    } else if (net.equals("ctnet") || net.equals("ctwap")) {
     Constants.MB_ID = 3;
    }
   } else {
    Constants.MB_ID = PhoneUtil.getProvidersName(this);
   }
  } else {
   if (net.equals("3gwap") || net.equals("uniwap")
     || net.equals("3gnet") || net.equals("uninet")) {
    Constants.MB_ID = 2;
   } else if (net.equals("cmnet") || net.equals("cmwap")) {
    Constants.MB_ID = 1;
   } else if (net.equals("ctnet") || net.equals("ctwap")) {
    Constants.MB_ID = 3;
   }
  }
 }

1是移动,2是联通,3是电信

**
  * 作者: peijiangping<BR>
  * 时间:2012-12-21下午6:22:38<BR>
  * 功能:获取可用网络列表<BR>
  * 返回值:void<BR>
  */
 public List<String> getNetWorkList() {
  ConnectivityManager cm = (ConnectivityManager) c
    .getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo[] infos = cm.getAllNetworkInfo();
  List<String> list = new ArrayList<String>();
  if (infos != null) {
   for (int i = 0; i < infos.length; i++) {
    NetworkInfo info = infos[i];
    String name = null;
    if (info.getTypeName().equals("WIFI")) {
     name = info.getTypeName();
    } else {
     name = info.getExtraInfo();
    }
    if (name != null && list.contains(name) == false) {
     list.add(name);
     // System.out.println(name);
    }
   }
  }
  return list;
 }

public String getNetWork() {
  String NOWNET = null;
  ConnectivityManager cm = (ConnectivityManager) c
    .getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo info = cm.getActiveNetworkInfo();
  if (info != null && info.isAvailable()) {
   if (info.getTypeName().equals("WIFI")) {
    NOWNET = info.getTypeName();
   } else {
    NOWNET = info.getExtraInfo();// cmwap/cmnet/wifi/uniwap/uninet
   }
  }
  return NOWNET;
 }

获取网络状态的信息

/**
* 作者: peijiangping<BR>
* 时间:2012-12-17下午2:55:31<BR>
* 功能:获取运营商信息<BR>
* 返回值:int<BR>
*/
public static int getProvidersName(Context c) {
int ProvidersName = 0;
try {
TelephonyManager telephonyManager = (TelephonyManager) c
.getSystemService(Context.TELEPHONY_SERVICE);
String operator = telephonyManager.getSimOperator();
if (operator == null || operator.equals("")) {
operator = telephonyManager.getSubscriberId();
}
if (operator == null || operator.equals("")) {
ToastUtil tu = new ToastUtil(c);
tu.showDefultToast("未检测到sim卡信息!");
}
if (operator != null) {
if (operator.startsWith("46000")
|| operator.startsWith("46002")) {
ProvidersName = 1;
} else if (operator.startsWith("46001")) {
ProvidersName = 2;
} else if (operator.startsWith("46003")) {
ProvidersName = 3;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return ProvidersName;
}

获取SIM卡信息(目前单卡可行)

嗯,再写一个根据电话号码解析出运营商

public static int validateMobile(String mobile) {
  if (mobile == null) {
   return 0;
  }
  mobile = getRealPhoneNum(mobile);
  if (mobile.trim().length() != 11) {
   return 0;
  }
  if (mobile.trim().substring(0, 3).equals("134")
    || mobile.trim().substring(0, 3).equals("135")
    || mobile.trim().substring(0, 3).equals("136")
    || mobile.trim().substring(0, 3).equals("137")
    || mobile.trim().substring(0, 3).equals("138")
    || mobile.trim().substring(0, 3).equals("139")
    || mobile.trim().substring(0, 3).equals("182")
    || mobile.trim().substring(0, 3).equals("150")
    || mobile.trim().substring(0, 3).equals("151")
    || mobile.trim().substring(0, 3).equals("152")
    || mobile.trim().substring(0, 3).equals("157")
    || mobile.trim().substring(0, 3).equals("158")
    || mobile.trim().substring(0, 3).equals("159")
    || mobile.trim().substring(0, 3).equals("187")
    || mobile.trim().substring(0, 3).equals("188")) {
   return 1;
  } else if (mobile.trim().substring(0, 3).equals("130")
    || mobile.trim().substring(0, 3).equals("131")
    || mobile.trim().substring(0, 3).equals("132")
    || mobile.trim().substring(0, 3).equals("156")
    || mobile.trim().substring(0, 3).equals("185")
    || mobile.trim().substring(0, 3).equals("186")) {
   return 2;
  } else if (mobile.trim().substring(0, 3).equals("133")
    || mobile.trim().substring(0, 3).equals("153")
    || mobile.trim().substring(0, 3).equals("180")
    || mobile.trim().substring(0, 3).equals("189")) {
   return 3;
  }
  return 0;
 }

比较笨的方法。

Android手机上判断网络运营商的更多相关文章

  1. xe5 android 手机上使用sqlite [转]

    在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank applicatio ...

  2. 如何在 Android 手机上实现抓包?

    如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么.网上的教程太复杂,不想麻烦.有 ...

  3. Android 手机上获取手机当前上网IP地址

      [转] 原文              Android 手机上获取手机当前上网IP地址                (手机网关给手机号分配的IP) 每个手机上网通过移动网关的时候,网关都会给该手 ...

  4. 如何在Android手机上进行自动化测试(下)

    版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 前言 通过阅读本篇教程,你将会了解到: 如何使用Poco对Android原生应用进行测试 Poco支持直接对任何Android原生应 ...

  5. 如何通过wifi在android手机上安装调试应用

    如何通过wifi在android手机上安装调试应用 1. 首先还是要打开手机的usb调试选项,并通过usb线连接手机.2. 然后执行“adb tcpip 5555”,把adb从usb模式切换到tcpi ...

  6. delphi xe5 android 手机上使用sqlite

    本篇我们介绍一下在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank ap ...

  7. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  8. Android 手机上安装并运行 Ubuntu 12.04

    ubuntu.sh脚本的原地址变动了,导致下载不了,现在更新了网盘地址.小技巧:遇到一些下载失效的时候可以试一试p2p下载工具(如 easyMule.迅雷等)试一试,说不定有人分享过~* —————— ...

  9. 在Android手机上获取其它应用的包名及版本

    转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...

随机推荐

  1. 基于VPN搭建混合云架构需要考虑的网络因素

     Joy Qiao from MSFT Wed, Jan 21 2015 8:44 AM 很多用户在搭建混合云架构时,会使用到微软Azure虚拟网络中的 VPN功能,来实现Azure中的虚拟网络与用户 ...

  2. 【转】Android - Button(按钮)的响应点击事件的4种写法

    原文网址:http://www.yrom.net/blog/2011/12/12/android-4-onclicklistener-of-button/ Button控件setOnclickList ...

  3. 任务栏窗口和状态图标的闪动 z

    Demo程序: 实现任务栏窗体和图标的闪动: 整个程序是基于Windows Forms的,对于任务栏右下角状态图标的闪动,创建了一个类型:NotifyIconAnimator,基本上是包装了Windo ...

  4. vi中如何去除高亮显示的单词

    在vi命令行模式下输入:set nohlsearch 单词不高亮显示:set hlsearch 单词高亮显示: 如果再次打开仍然显示,则可以随便搜索一个不存在的单词,然后保存,重新打开高亮不在显示:

  5. [娱乐]GameMaker绘制参数方程的图像

    今天,我翻了旧物,硬着头皮看了这源码.突然恍然大悟,这岂不就是当年学的参数方程! 目前,最早开始教授参数方程实在高三时,并作为一门选修课程,简化了求解圆锥曲线方程的难度,在高考中也很容易拿分,考试过后 ...

  6. 数据库设置表的check约束出现乱码

    采用默认的方式见了一个数据库,但是有个表里需要建一个check约束.将约束保存之后再打开看到中文成了??.后来查了一下是数据库排序规则除了问题. 详见两图即可明白: 这里的约束中文显示乱码: 按下图设 ...

  7. 【译】 AWK教程指南 1前言

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  8. 树-伸展树(Splay Tree)

    伸展树概念 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造. (01) 伸展树属于二 ...

  9. HIbernate学习笔记(九) hibernate事务并发处理与乐观悲观锁

    事务并发处理 一. 数据库的隔离级别:并发性作用. 1.   ReadUncommited(未提交读):没有提交就可以读取到数据(发出了Insert,但没有commit就可以读取到.)很少用 2.   ...

  10. BNUOJ-29364 Bread Sorting 水题

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29364 题意:给一个序列,输出序列中,二进制1的个数最少的数.. 随便搞搞就行了,关于更多 ...