号码归属地的查询

来源:互联网 发布:ubuntu安装jdk 编辑:程序博客网 时间:2024/04/30 12:21

实现Android号码归属地的查询:

号码归属地的数据库可以从淘宝或者其他地方购买。数据库需要需要和程序一起打包放进apk中,所以数据库数据不能太大。可以对数据库进行优化。

   

                      表tb_address

 

                       表numinfo

优化方法:1.提取冗余数据

              2.拆分冗余数据到一张新的表中

              3.利用外键引用引用数据的表

 

第一步:将数据库db文件放到资产目录assert下,db文件会一起打包进项目中,但是不会一起安装。

           获取资产资源的方法:context.getAsserts().open("文件名")

public boolean copyFile(String name, File file, ProgressDialog pd) {        try {            AssetManager am = context.getAssets();            InputStream is = am.open(name);            FileOutputStream fos = new FileOutputStream(file);            int len = 0;            byte[] buffer = new byte[2048];            int progress = 0;            int total = is.available();            pd.setMax(total);            while ((len = is.read(buffer)) != -1) {                fos.write(buffer, 0, len);                progress += len;                pd.setProgress(progress);            }            pd.dismiss();            is.close();            fos.flush();            fos.close();            return true;        } catch (IOException e) {            e.printStackTrace();            return false;        }

 

   第二步:数据库中号码归属地查询方法:

           判断是否是手机号码(正则表达式):String pattern = "^1[3458]\\d{9}$";

           手机号码归属地的查询:select city from address_tb where _id=(select outkey from numinfo where mobileprefix=?

           其他号码(根据区号来判断):select city from address_tb where area=? limit 1

           号码的格式:

              4位   :5556 模拟器
              10位 :3位的区号 + 7位的号码

              11位 :3位的区号 + 8位电话号码
                      4位的区号 + 7位电话号码

              12位 :4位的区号 + 8位的电话号码

package cn.itcast.mobilesafe.db.dao;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/*** * 号码归属查询 *  * @author Administrator *  */public class NumberQueryDao {    public static String getAddress(String number) {        String address = number;        String path = "/data/data/cn.itcast.mobilesafe/files/naddress.db";        SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,                SQLiteDatabase.OPEN_READONLY);        String pattern = "^1[3458]\\d{9}$";// 手机号码的格式        if (db.isOpen()) {            if (number.matches(pattern)) {                String sql = "select city from address_tb where _id=(select outkey from numinfo where mobileprefix=?)";                Cursor cursor = db.rawQuery(sql,                        new String[] { number.substring(0, 7) });                if (cursor.moveToFirst()) {                    address = cursor.getString(0);                }                cursor.close();// 一定不要忘記了            } else {//其他号码(固定电话)根据区号来判断                Cursor cursor;                switch (number.length()) {                case 4:                    address = "模拟器";                    break;                case 7:                    address = "本地号码";                    break;                case 8:                    address = "本地号码";                    break;                case 10:                    cursor = db.rawQuery("select city from address_tb where area=? limit 1",                            new String[] { number.substring(0, 3) });                    if (cursor.moveToFirst()) {                        address = cursor.getString(0);                    }                    cursor.close();                    break;                case 12:                    cursor = db.rawQuery("select city from address_tb where area= ? limit 1 ",                            new String[] { number.substring(0, 4) });                    if (cursor.moveToFirst()) {                        address = cursor.getString(0);                    }                    cursor.close();                    break;                case 11:                    cursor = db                            .rawQuery(                                    "select city from address_tb where area = ? limit 1",                                    new String[] { number.substring(0, 3) });                    if (cursor.moveToFirst()) {                        address = cursor.getString(0);                    }                    cursor.close();                    cursor = db                            .rawQuery(                                    "select city from address_tb where area = ? limit 1",                                    new String[] { number.substring(0, 4) });                    if (cursor.moveToFirst()) {                        address = cursor.getString(0);                    }                    cursor.close();                    break;                }            }        }        return address;    }}

 

 

 

             

0 0
原创粉丝点击