本篇博客是自己在开发时用到的一个点,获取运营商的号码段,截至2013年12月30日,三大运营商的号码段增加了不少,还出现了1700这样4位的号码段。号码段有什么用呢?每个运营商都有不同的号码段,比如159是移动的,185是联通的,189是电信的,通过号码段我们可以分辨出该号码是属于那个运营商的。
我是通过把三大运营商的号码段写到配置文件里,通过解析配置文件把号码段读出来,只好再进行比对。下面是实现:
写一个配置文件
/mobilemeeting/res/raw/config.xml
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <config>
  3. <!-- 移动现有号码段 -->
  4. <TEL_MOBILE>
  5. 134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188
  6. </TEL_MOBILE>
  7. <!-- 联通现有号码段 -->
  8. <TEL_UNICOM>
  9. 130,131,132,155,156,185,186,145,176
  10. </TEL_UNICOM>
  11. <!-- 电信现有号码段 -->
  12. <TELECOM>
  13. 133,153,180,181,189,1700,177
  14. </TELECOM>
  15. </config>
写一个配置文件控制器
[java] view plaincopy
  1. package com.suntek.mobilemeeting.config;
  2. import java.io.InputStream;
  3. import java.util.HashMap;
  4. import javax.xml.parsers.SAXParser;
  5. import javax.xml.parsers.SAXParserFactory;
  6. import org.xml.sax.Attributes;
  7. import org.xml.sax.SAXException;
  8. import org.xml.sax.helpers.DefaultHandler;
  9. import android.text.TextUtils;
  10. /**
  11. * 配置文件控制器 用于获取配置文件
  12. *
  13. * @author wwj
  14. *
  15. */
  16. public class ConfigController {
  17. private static ConfigController instance;
  18. public static ConfigController getInstance() {
  19. if (instance == null) {
  20. synchronized (ConfigController.class) {
  21. if (instance == null) {
  22. instance = new ConfigController();
  23. }
  24. }
  25. }
  26. return instance;
  27. }
  28. public ConfigController() {
  29. InputStream input = getClass().getResourceAsStream(
  30. "/res/raw/config.xml");
  31. try {
  32. config = new ConfigParser(input).getResult();
  33. } catch (Exception e) {
  34. config = new HashMap<String, String>();
  35. e.printStackTrace();
  36. }
  37. }
  38. private HashMap<String, String> config;
  39. public String get(String key) {
  40. return config.get(key);
  41. }
  42. /**
  43. * 获取/res/raw/config.xml中的配置
  44. *
  45. * @param key
  46. *            配置名
  47. * @param failedValue
  48. *            获取配置失败时的取值:没有配置,或者配置不为boolean型
  49. */
  50. public boolean get(String key, boolean failedValue) {
  51. String stringValue = config.get(key);
  52. if (TextUtils.isEmpty(stringValue)
  53. || !("true".equalsIgnoreCase(stringValue) || "false"
  54. .equalsIgnoreCase(stringValue))) {
  55. return failedValue;
  56. } else {
  57. return Boolean.parseBoolean(stringValue);
  58. }
  59. }
  60. class ConfigParser extends DefaultHandler {
  61. private StringBuffer accumulator;
  62. private HashMap<String, String> result;
  63. public ConfigParser(InputStream input) throws Exception {
  64. SAXParserFactory factory = SAXParserFactory.newInstance();
  65. SAXParser parser = factory.newSAXParser();
  66. parser.parse(input, this);
  67. }
  68. public void characters(char buffer[], int start, int length) {
  69. accumulator.append(buffer, start, length);
  70. }
  71. public void endDocument() throws SAXException {
  72. super.endDocument();
  73. }
  74. public void endElement(String uri, String localName, String qName)
  75. throws SAXException {
  76. super.endElement(uri, localName, qName);
  77. if (!"config".equals(localName)) { // "config" 是根元素
  78. String key = localName;
  79. String value = accumulator.toString();
  80. result.put(key, value);
  81. }
  82. }
  83. public void startDocument() throws SAXException {
  84. super.startDocument();
  85. accumulator = new StringBuffer();
  86. result = new HashMap<String, String>();
  87. }
  88. public void startElement(String uri, String localName, String qName,
  89. Attributes attributes) throws SAXException {
  90. accumulator.setLength(0);
  91. }
  92. public HashMap<String, String> getResult() {
  93. return result;
  94. }
  95. }
  96. }
写一个常量类
[java] view plaincopy
  1. package com.suntek.mobilemeeting.interfaces;
  2. import com.suntek.mobilemeeting.config.ConfigController;
  3. /**
  4. * 常量类
  5. *
  6. * @author wwj
  7. *
  8. */
  9. public interface Const {
  10. String TEL_MOBILE = ConfigController.getInstance().get("TEL_MOBILE"); // 移动的号码段
  11. String TEL_UNICOM = ConfigController.getInstance().get("TEL_UNICOM"); // 联通的号码段
  12. String TELECOM = ConfigController.getInstance().get("TELECOM"); // 电信的号码段
  13. }
判断运营商的方法
[java] view plaincopy
  1. /**
  2. * <pre>
  3. *  Const为常量类或接口
  4. *  String TEL_MOBILE = config.get("TEL_MOBILE", "134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188");  //移动的号码段
  5. *  String TEL_UNICOM = config.get("TEL_UNICOM", "130,131,132,155,156,185,186,145,176");  //联通的号码段
  6. *
  7. * 截至2013年12月30日 三大运营商号码段
  8. * 移动:134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188
  9. * 联通:130,131,132,155,156,185,186,145,176
  10. * 电信:133,153,180,181,189,1700,177
  11. * </pre>
  12. *
  13. * @param tel
  14. * @return 运营商 (1=移动、2=联通)
  15. */
  16. public static byte getTelCompany(String tel) {
  17. String telHead = "";
  18. if (tel.substring(0, 4).equals("1700")) {
  19. telHead = tel.substring(0, 4);
  20. } else {
  21. telHead = tel.substring(0, 3);
  22. }
  23. if (isMobileUnicom(telHead, 1)) {
  24. return 1;
  25. }
  26. if (isMobileUnicom(telHead, 2)) {
  27. return 2;
  28. }
  29. if (isMobileUnicom(telHead, 3)) {
  30. return 3;
  31. }
  32. return -1;
  33. }
  34. /**
  35. * 判断是哪种类型号码段
  36. *
  37. * @param telHead
  38. * @param company
  39. * @return
  40. */
  41. private static boolean isMobileUnicom(String telHead, int company) {
  42. String tel = "";
  43. switch (company) {
  44. case 1: // 移动号码段
  45. tel = Const.TEL_MOBILE;
  46. break;
  47. case 2: // 联通号码段
  48. tel = Const.TEL_UNICOM;
  49. break;
  50. case 3: // 电信号码段
  51. tel = Const.TELECOM;
  52. break;
  53. default:
  54. return false;
  55. }
  56. // 分割
  57. String[] aTel = tel.split(",");
  58. int iCount = aTel.length;
  59. for (int i = 0; i < iCount; i++) {
  60. if (aTel[i].equals(telHead)) {
  61. return true;
  62. }
  63. }
  64. return false;
  65. }
有需要的Android猿猿们拿去用吧。

Android通讯录开发之获取运营商号码段(移动、联通、电信)相关推荐

  1. Android通讯录开发之获取运营商号码段(移动、联通,微信小程序的事件处理

    <TEL_UNICOM> 130,131,132,155,156,185,186,145,176 </TEL_UNICOM> 133,153,180,181,189,1700, ...

  2. Android通讯录开发之获取运营商号码段(移动、联通,android选择题题库

    133,153,180,181,189,1700,177 写一个配置文件控制器 package com.suntek.mobilemeeting.config; import java.io.Inpu ...

  3. android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商

    android关闭应用及获取运营商ISP 1.AndroidManifest.xml <?xml version="1.0" encoding="utf-8&quo ...

  4. 三大电信运营商号码段

    为什么80%的码农都做不了架构师?>>>    最新三大电信运营商号码段部分: 中国移动号段 134.135.136.137.138.139. 147.150.151.152.157 ...

  5. Android软件开发之获取通讯录联系人信息

    点击打开链接http://blog.csdn.net/snwrking/article/details/7601794 Android软件开发之获取通讯录联系人信息 + android联系人信息的存储 ...

  6. android获取各运营商信号,一篇关于 Android 获取运营商的全面笔记

    发表时间:2019-10-20 内容总览 本文会给出在 Android 上获取运营商的方法,几个相近方法结果的差异,以及在多卡情况下有效的获取方式.最后额外提一下一种不需要请求设备识别码获取运营商信息 ...

  7. php 判断联通移动电信,JavaScript_JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单),正则表达式判断所填入号码的 - phpStudy...

    JavaScript判断手机号运营商是移动.联通.电信还是其他(代码简单) 正则表达式判断所填入号码的运营商js代码修改版:/article/31563.htm 在做WEB项目时,有时候需要根据用户的 ...

  8. Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)

    Android通讯录模糊匹配搜索实现(号码.首字母.简拼.全拼) 2013年12月10日 工作记录 小巫在工作中碰到一个需求,要求实现通讯录联系人的搜索,获取联系人的方式有好几种,我都有点混乱了,下面 ...

  9. Android通讯录模糊匹配搜索实现(号码 首字母 简拼 全拼)

    Android通讯录模糊匹配搜索实现(号码.首字母.简拼.全拼) 2013年12月10日 工作记录 小巫在工作中碰到一个需求,要求实现通讯录联系人的搜索,获取联系人的方式有好几种,我都有点混乱了,下面 ...

最新文章

  1. G - MPI Maelstrom POJ - 1502
  2. 智能驾驶是否会“运动式”发展
  3. MySQL高效分页解决方案集
  4. 人生第一次手术:0806
  5. android中shape的属性,android中shape的属性
  6. python朋友圈切图代码
  7. 【转载】最好女孩子概率模型
  8. 第一章:Understanding web performance-理解web性能
  9. bash 命令提示符_命令行上每天的Bash提示
  10. 原有磁盘上创建lvm_Centos7创建LVM磁盘管理
  11. 创建Win2003域和Win2008域之间的信任关系,Active Directory系列之十八
  12. 华为服务器修改登录密码,服务器登录修改密码
  13. MySQL数据库之分库分表方案
  14. 大学生身价不如农民工,中国高等教育是否出了什么问题?
  15. 基于FBX SDK的FBX模型解析与加载 -(四)
  16. 【机器学习】十大机器学习基础算法
  17. IAR中使用IELFTOOL进行软件代码checksum的生成和添加
  18. VUE.JS 实现图片随鼠标变换的动画效果
  19. 公纵号发送提示信息(用户微服务--消息微服务)
  20. 把阿拉伯数字翻译成中文大写数字

热门文章

  1. android 几个麦克风,在Android中同时在多个应用中使用麦克风
  2. Ubuntu 12.04下安装QQ 2012
  3. 木马超过病毒成为互联网安全最大隐患
  4. 正则表达式快速入门(三)
  5. Uboot 2017.01 启动流程分析
  6. 网络安全:预防胜于治疗
  7. APB时钟计算串口波特率
  8. 从公司管理到IT审计 控制风险并增加价值(zt)
  9. 2017年第三届 美亚杯电子取证 个人赛题解
  10. 安卓手机导入html短信,旧手机短信导入新手机