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; }
演示图片如下: