100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android通讯录开发之获取运营商号码段(移动 联通 电信)

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

时间:2021-05-20 04:50:20

相关推荐

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

本篇博客是自己在开发时用到的一个点,获取运营商的号码段,截至12月30日,三大运营商的号码段增加了不少,还出现了1700这样4位的号码段。号码段有什么用呢?每个运营商都有不同的号码段,比如159是移动的,185是联通的,189是电信的,通过号码段我们可以分辨出该号码是属于那个运营商的。

我是通过把三大运营商的号码段写到配置文件里,通过解析配置文件把号码段读出来,只好再进行比对。下面是实现:

写一个配置文件 /mobilemeeting/res/raw/config.xml

[html]view plaincopy<?xmlversion="1.0"encoding="utf-8"?> <config> <!--移动现有号码段--> <TEL_MOBILE> 134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188 </TEL_MOBILE> <!--联通现有号码段--> <TEL_UNICOM> 130,131,132,155,156,185,186,145,176 </TEL_UNICOM> <!--电信现有号码段--> <TELECOM> 133,153,180,181,189,1700,177 </TELECOM> </config>

写一个配置文件控制器[java]view plaincopypackagecom.suntek.mobilemeeting.config; importjava.io.InputStream; importjava.util.HashMap; importjavax.xml.parsers.SAXParser; importjavax.xml.parsers.SAXParserFactory; importorg.xml.sax.Attributes; importorg.xml.sax.SAXException; importorg.xml.sax.helpers.DefaultHandler; importandroid.text.TextUtils; /** *配置文件控制器用于获取配置文件 * *@authorwwj * */ publicclassConfigController{ privatestaticConfigControllerinstance; publicstaticConfigControllergetInstance(){ if(instance==null){ synchronized(ConfigController.class){ if(instance==null){ instance=newConfigController(); } } } returninstance; } publicConfigController(){ InputStreaminput=getClass().getResourceAsStream( "/res/raw/config.xml"); try{ config=newConfigParser(input).getResult(); }catch(Exceptione){ config=newHashMap<String,String>(); e.printStackTrace(); } } privateHashMap<String,String>config; publicStringget(Stringkey){ returnconfig.get(key); } /** *获取/res/raw/config.xml中的配置 * *@paramkey *配置名 *@paramfailedValue *获取配置失败时的取值:没有配置,或者配置不为boolean型 */ publicbooleanget(Stringkey,booleanfailedValue){ StringstringValue=config.get(key); if(TextUtils.isEmpty(stringValue) ||!("true".equalsIgnoreCase(stringValue)||"false" .equalsIgnoreCase(stringValue))){ returnfailedValue; }else{ returnBoolean.parseBoolean(stringValue); } } classConfigParserextendsDefaultHandler{ privateStringBufferaccumulator; privateHashMap<String,String>result; publicConfigParser(InputStreaminput)throwsException{ SAXParserFactoryfactory=SAXParserFactory.newInstance(); SAXParserparser=factory.newSAXParser(); parser.parse(input,this); } publicvoidcharacters(charbuffer[],intstart,intlength){ accumulator.append(buffer,start,length); } publicvoidendDocument()throwsSAXException{ super.endDocument(); } publicvoidendElement(Stringuri,StringlocalName,StringqName) throwsSAXException{ super.endElement(uri,localName,qName); if(!"config".equals(localName)){//"config"是根元素 Stringkey=localName; Stringvalue=accumulator.toString(); result.put(key,value); } } publicvoidstartDocument()throwsSAXException{ super.startDocument(); accumulator=newStringBuffer(); result=newHashMap<String,String>(); } publicvoidstartElement(Stringuri,StringlocalName,StringqName, Attributesattributes)throwsSAXException{ accumulator.setLength(0); } publicHashMap<String,String>getResult(){ returnresult; } } }

写一个常量类[java]view plaincopypackagecom.suntek.mobilemeeting.interfaces; importcom.suntek.mobilemeeting.config.ConfigController; /** *常量类 * *@authorwwj * */ publicinterfaceConst{ StringTEL_MOBILE=ConfigController.getInstance().get("TEL_MOBILE");//移动的号码段 StringTEL_UNICOM=ConfigController.getInstance().get("TEL_UNICOM");//联通的号码段 StringTELECOM=ConfigController.getInstance().get("TELECOM");//电信的号码段 }

判断运营商的方法[java]view plaincopy/** *<pre> *Const为常量类或接口 *StringTEL_MOBILE=config.get("TEL_MOBILE","134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188");//移动的号码段 *StringTEL_UNICOM=config.get("TEL_UNICOM","130,131,132,155,156,185,186,145,176");//联通的号码段 * *截至12月30日三大运营商号码段 *移动:134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188 *联通:130,131,132,155,156,185,186,145,176 *电信:133,153,180,181,189,1700,177 *</pre> * *@paramtel *@return运营商(1=移动、2=联通) */ publicstaticbytegetTelCompany(Stringtel){ StringtelHead=""; if(tel.substring(0,4).equals("1700")){ telHead=tel.substring(0,4); }else{ telHead=tel.substring(0,3); } if(isMobileUnicom(telHead,1)){ return1; } if(isMobileUnicom(telHead,2)){ return2; } if(isMobileUnicom(telHead,3)){ return3; } return-1; } /** *判断是哪种类型号码段 * *@paramtelHead *@paramcompany *@return */ privatestaticbooleanisMobileUnicom(StringtelHead,intcompany){ Stringtel=""; switch(company){ case1://移动号码段 tel=Const.TEL_MOBILE; break; case2://联通号码段 tel=Const.TEL_UNICOM; break; case3://电信号码段 tel=Const.TELECOM; break; default: returnfalse; } //分割 String[]aTel=tel.split(","); intiCount=aTel.length; for(inti=0;i<iCount;i++){ if(aTel[i].equals(telHead)){ returntrue; } } returnfalse; }

有需要的Android猿猿们拿去用吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。