Android实现归属地查询功能

  实现归属地查询大体有两种方法可以实现,一种是通过归属地API进行查询,另一种是查询本地数据库。两种方法各有优劣,最好结合起来使用,我本次采用的是查询数据库的方法。首先需要从网上下载归属地数据库callHomeDB.db。CSDN就可以下载。

  下载好数据库之后,可以利用一个小软件SQLite Expert Professional对数据库进行查看,同时该软件也支持对SQL语句进行操作。

  有了数据库之后就可以进行代码编写了:

  1. 将数据库文件复制到Android Studio工程目录assets下。

 

 

  2. 对数据库进行复制,将assets目录下的数据库复制到工程目录下:

     /**
     * 复制数据库
     */
    private void copyDB(final String dbname){
        new Thread(){
            public void run(){
                try {
                    File file = new File(getFilesDir(),dbname);
                    if (file.exists()&&file.length()>0){
                        Log.i("VirusScanActivity","数据库已存在");
                        return;
                    }
                    InputStream is = getAssets().open(dbname);
                    FileOutputStream fos = openFileOutput(dbname,MODE_PRIVATE);
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    while((len=is.read(buffer))!=-1){
                        fos.write(buffer,0,len);
                    }
                    is.close();
                    fos.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }.start();
    }

  3. 对数据库执行查询语句,获取查询结果

    public static String checkCallHome(String phonenumber){
        String desc = null;

        SQLiteDatabase db = SQLiteDatabase.openDatabase("data/data/com.example.user.callhomedemo/files/callHomeDB.db",null,SQLiteDatabase.OPEN_READONLY);
        Cursor cursor = db.rawQuery("select * from mob_location where _id = ?",new String[]{phonenumber.substring(0,7)});
        if (cursor.moveToNext()){
            desc = cursor.getString(1);
        }
        cursor.close();
        db.close();
        return desc;
    }

   演示图片如下:

 

  

 

posted @ 2016-07-05 17:31  风雪夜归人shen  阅读(791)  评论(0编辑  收藏  举报