Android实例-手机安全卫士(三十四)-优化归属地查询

一、目标

  1、处理110、10086、座机等非手机号码的归属地;

技术分享

二、代码实现

  1、判断输入框中的文本是否符合手机号码的格式(1开头,第二位是345678,后面9位均为0-9的整数),根据手机号码的特点确定其正则表达式为“1[345678]\d{9}”,在代码中正则表达式以“^”开头,以“$”结束,同时里面的“\”需要转义,所以判断条件为“^1[345678]\\d{9}$”。上述正则表达式说明:[345678]表示“[]”里面的数任取一个,\d表示0-9的数任取一个,{9}表示前面的\d正好匹配9次。

  2、在号码归属地查询工具类(NumberAddQueryUtils)的查询号码queryNumber(String number)方法中,在查询数据库之前将传入的号码(number)通过其matches(String regularExpression)方法

判断一下是否匹配手机号码的正则表达式,如匹配则查询数据库,如不匹配则查询另外的数据库(如110、10086、座机等);

手机号码的正则表达式:

技术分享
1 number.matches("^1[345678]\\d{9}$")
View Code

 

  3、通过传入的号码(number)的startsWith(String prefix)方法判断号码是否以“0”开头,若成立则截取号码前4位查询data2中的area获取归属地,再将归属地的后两位(电信、联通、移动)去除便可得到城市名,最后返回该值即可,另外需要处理010、021等3位数区号的特殊例子;

处理座机的代码:

技术分享
 1 //处理座机
 2                 if(number.startsWith("010")){
 3                     location = "北京";
 4                 }else if (number.startsWith("021")) {
 5                     location = "上海";
 6                 }else if(number.startsWith("0")){
 7                     Cursor cursor = database.rawQuery(
 8                             "select location from data2 where area =  ?",
 9                             new String[] { number.substring(1, 4) });                     
10                     while (cursor.moveToNext()) {
11                         location = cursor.getString(0).substring(0, cursor.getString(0).length()-2);
12                     }
13                     cursor.close();
14                 }
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。