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}$")

  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                 }

时间: 2024-10-01 07:35:51

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

Android实例-手机安全卫士(十四)-为密码进行MD5加密

一.目标. 将设置的密码通过MD5加密后再保存. 二.代码实现. 1.在自定义工具包(com.example.mobilesafe.ui)中新增一个类(取名MD5Utils).在新建类(MD5Utils)中新建一个返回值为String类型的public的静态方法(取名mD5Encryption),传入参数为String类型(password). 2.在新建的方法(md5Encryption)中: ①.通过消息摘要器对象(MessageDigest)的getInstance(String algo

Android实例-手机安全卫士(十八)-完成设置向导的4个UI和跳转事件

一.目标. 制作向导设置里面每一步的UI布局及点击事件控制. 1.使用自定义button背景.自定义组合控件.自定义文本样式等. 2.利用SharedPreferences对象,设置应用程序配置信息(向导设置完成后就不再进入)           二.代码实现. 1.在程序包下新建另外3个UI的类(分别为SetupWizard_ui_2.java.SetupWizard_ui_3.java.SetupWizard_ui_4.java),并在配置文件中注册Activity. 2.根据UI设计,在设

Android实例-手机安全卫士(十)-自定义对话框

一.目标. 当点击“手机防盗”时弹出自定义的设置密码对话框.如果已经设置密码,则弹出自定义的输入密码对话框. 二.代码实现. 1.在layout文件夹下新建xml(取名setpwddialog.xml)文件用于设置自定义对话框的UI. 新建xml文件代码如下; 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.a

Android实例-手机安全卫士(十二)-制作输入密码对话框并设置相应点击事件

一.目标. 自定义输入密码对话框,根据输入的密码与保存着的密码进行判断. 二.代码实现. 1. 采用第十节的方法自定义一个输入密码的对话框. 2.为按钮设置点击事件,主要介绍“确认”按钮的点击事件. ①.通过TextView对象的getText()得到文本并通过toString()转成字符串再通过trim()去除空格,得到String对象的输入密码: ②.通过SharedPreferences对象的getString(String key, String defValue)获得保存着的密码,参数

Android实例-手机安全卫士(十五)-由主界面进入手机防盗界面

一.目标 1.在主界面中通过“设置防盗密码”或者“输入防盗密码”后,对话框消失,并进入”手机防盗界面“. 2.进入是”手机防盗界面“时,根据有无完成”手机防盗设置向导“的情况进入不同的界面.若未完成,则进入向导界面,若已完成,则进入防盗界面.          二.代码实现. 1.在程序包(com.example.mobilesafe)下新建两个Activity(分别取名SecurityActivity和SetupWizard),并在配置文件(AndroidManifest.xml)中完成注册.

Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

原文:Android项目实战(三十四):蓝牙4.0 BLE 多设备连接 最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据. 查询了很多资料终于实现,现进行总结. -------------------------------------------------------------------------------------------------------------------------------------------------------------

Android实例-手机安全卫士(三)-设计主页面UI

一.目标. 主界面UI如图所示: 方面是一个功能列表提示框(采用TextView),下面是功能列表(采用GridView). 二.代码实现. 1.在主界面布局文件(activity_home.xml)中增加组件.主界面布局文件(activity_home.xml)采用线性布局,上面一个TextView,根据UI设置相应属性:下面一个是GridView,通过android:numColumns属性设置该组件的列数,由于GridView还需要inflate单个布局文件,所以为其设置id. 主界面布局

Android实例-手机安全卫士(三十三)-将数据库导入程序中

一.目标 1. 在项目中引入SQLiteDatabase数据库,通过输入输出流将数据库复制至指定path目录下: 2.通过SQLiteDatabase的openDatabase()使用数据库,通过 rawQuery()方法执行SQL语句: 3.初步实现号码归属地查询功能. 数据库结构: data1:  data2: 数据库在项目中:     查询结果: 二.代码实现 1.将电话归属地数据库(名称address.db)拷贝至项目的assets文件夹下: 2.在项目src文件夹中新建数据库工具包(取

Android实例-手机安全卫士(三十七)-显示去电号码的归属地

一. 目标  利用BroadcastReceive获取去电广播,并获取去电号码,再查询数据库获取归属信息: 二.代码实现: 1.在广播包(receiver)下新建一个类(取名OutCallReceiver)继承BroadcastReceive: 2.在清单文件中注册,意图过滤器(inter-filter)中监听的动作为去电(NEW_OUTGOING_CALL) 广播接受者注册代码: 1 <receiver android:name="com.example.mobilesafe.recei