码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-04-16 12:18:32      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

一、目标

  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

 

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

标签:

原文地址:http://www.cnblogs.com/Red-Shark/p/4431587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!