日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手机安全卫士------查询号码归属地

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手机安全卫士------查询号码归属地 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

效果圖

技術點

  • 數據庫的查詢操作
  • 正則表達式
  • 監聽輸入框的輸入事件

思路

查詢號碼歸屬地的方法有兩種:
1.網絡查詢,通過網上的一些接口,可以查詢到JSON數據等

2.本地查詢,APK中,自帶一個數據庫,放置號段對應的地點信息

考慮到用戶的使用場景,決定采用本地查詢的方式來實現這個功能。

  • 本功能采用的是 小米提供的數據庫。
  • 內部有兩張表:
  • data1: id:手機號碼的前七位 outkey:外鍵
  • data2: id:對應表1中的外鍵 location:位置 area:區號

查詢手機號碼的思路

首先查詢出對應的外鍵:
select outkey from data1 where id = “號碼的前七位”

之后根據外鍵查詢位置
select location from data2 where id = “外鍵的值”

即:
執行SQL語句:
select location from data2 where id = (select outkey from data1 where id = “號碼的前七位” )
注意:當一個SQL語句中嵌套另一個SQL語句的時候,要用括號括起來。

查詢固定電話的思路:

判斷號碼是否以0開頭,且長度大于10
如果是,則截取號碼的第2-3位,進行數據庫查詢;
如果沒有,則截取號碼的2-4位進行數據庫查詢;
如果還沒有,那就直接返回號碼

select location from data2 where area=”截取的那部分數字”

同時,還要通過正則表達式對數據進行“格式化”
1) 以^開頭
2)[xyz] 確定該位置的數據一定為x/y/z中的一個
3)[x-z]表示該位置的值為x-z
4)\d 表示0-9數字
5){n} 顯示多少次
6)以$ 結尾

則,手機號的正則表達式:
^1[3458]\d{9}$

復制數據到手機中

數據庫放在raw文件夾內,在Splash頁面運行的時候,復制到手機內存中。具體操作:

private void copyDatabaseToMobile(){//1.把raw文件轉換成字節流InputStream is = SplashActivity.this.getResources().openRawResource(R.raw.address);//2.復制數據到內存中File file = new File(QueryNumberUtils.DATABASE_PATH);try{FileOutputStream fos = new FileOutputStream(file);byte[] buffer = new byte[1024];int length = -1;while((length = is.read(buffer)) != -1){fos.write(buffer,0,length);}fos.close();is.close();}catch (IOException e){e.printStackTrace();}}

讓”結果文本”隨著輸入框內容的改變而改變:

addTextChangedListener() 方法,參數為 TextWacher的示例,由于TextWatcher是接口,所以以匿名內部類的形式創建,并重寫其中的三個方法beforeTextChanged、onTextChanged、afterTextChanged

其中,主要重寫onTextChanged,讓它在回調的之后執行查詢地址操作。

最終實現代碼:

mEtNumber.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}//文字內容發生變化時進行的操作public void onTextChanged(CharSequence s, int start, int before, int count) {if(s != null && s.length() >= 3){ mTvResult.setText(QueryNumberUtils.getLocationByNumber(s.toString()));}if(s.length() <= 2){mTvResult.setText("");}}@Overridepublic void afterTextChanged(Editable s) {} });

查詢功能的代碼:

public static String getLocationByNumber(String number){String location = null;//判斷格式是否為手機號碼String regular = "^1[34568]\\d{9}$";if(number.matches(regular)){//是手機號碼location = queryPhoneNumber(number);}else{location = queryOtherNumber(number);}return location;}//查詢手機號碼歸屬地的操作private static String queryPhoneNumber(String number){SQLiteDatabase sdb = SQLiteDatabase.openDatabase(DATABASE_PATH,null,SQLiteDatabase.OPEN_READONLY);String location = null;Cursor cursor = sdb.rawQuery("select location from data2 where id = (select outkey from data1 where id = ?)",new String[]{number.substring(0,7)});while(cursor.moveToNext()){location = cursor.getString(0);}if(location == null){location = number;}cursor.close();return location;}//查詢其他號碼歸屬地的操作private static String queryOtherNumber(String number){SQLiteDatabase sdb = SQLiteDatabase.openDatabase(DATABASE_PATH,null,SQLiteDatabase.OPEN_READONLY);String location = null;switch(number.length()){case 3://類似110 119 120之類的特殊電話location = "特殊電話";break;case 4:location = "模擬器電話";break;case 5://10010 10086之類的客服電話location = "客服電話";break;default:if(number.length() > 10 && number.startsWith("0")){//此時為固定電話號碼//查詢固定電話號碼:location = queryTelNumber(number);}break;}if(location == null){location = number;}return location;}//查詢固定電話的號碼歸屬地private static String queryTelNumber(String number){SQLiteDatabase sdb = SQLiteDatabase.openDatabase(DATABASE_PATH,null,SQLiteDatabase.OPEN_READONLY);String location = null;Cursor cursor = null;cursor = sdb.rawQuery("select location from data2 where area= ?",new String[]{number.substring(1,3)});while(cursor.moveToNext()){location = cursor.getString(0);}cursor = sdb.rawQuery("select location from data2 where area= ?",new String[]{number.substring(1,4)});while(cursor.moveToNext()){location = cursor.getString(0);}if(cursor != null) {cursor.close();return location.substring(0, location.length() - 2);}cursor.close();return number;}

總結

以上是生活随笔為你收集整理的手机安全卫士------查询号码归属地的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 学生调教贱奴丨vk | 狠狠狠狠狠狠干 | 国产精品久久久久久福利 | 精品一区二区三区视频 | 国产激情精品 | 免费黄色网页 | 欧美久久久久久久 | 欧美wwwxxxx| 日韩一区二区三区在线播放 | www.av在线播放 | xxx日本少妇 | 国产精品一区免费观看 | 日韩精品一区二区三区中文在线 | 激情狠狠 | 麻豆黄色网址 | 欧美一区亚洲 | 欧美日韩精品三区 | 精品人妻少妇嫩草av无码 | 国产真实乱人偷精品视频 | 超碰综合网 | 中文字幕日韩久久 | 亚洲免费一区二区 | 欧美激情精品久久久久久蜜臀 | av爽妇网| 日韩123 | 超碰精品在线 | 激情综合网五月天 | 催眠美妇肉奴系统 | 欧美成人精品一区二区免费看片 | 国产亚洲色婷婷久久99精品91 | 国产精品外围 | 日韩一区二区视频在线 | 法国空姐 在线 | 又大又粗又爽18禁免费看 | 国产又粗又猛又色 | 久久精品欧美一区二区三区不卡 | 久久久6 | 欧美自拍视频 | 一区二区三区福利视频 | 亚洲av无码国产精品久久 | 男人操女人的软件 | 91亚色视频| 无码乱人伦一区二区亚洲 | 国产色视频在线 | av黄页| 欧美精品1区2区 | 息与子五十路翔田千里 | 中文无码日韩欧 | 少妇按摩一区二区三区 | eeuss一区二区三区 | 丰满少妇麻豆av苏语棠 | 花房姑娘免费观看全集 | 少妇高潮一区二区三区喷水 | 99久久久无码国产精品性黑人 | 免费看片网站91 | 在线看的免费网站 | 亚洲美女一区二区三区 | 欧美一区二区三区日韩 | 成人1区2区3区 | 国产亚洲精久久久久久无码77777 | tube极品少妇videos | 很污的网站| 精久久久久久 | 成人综合一区 | 欧美一区二区三区成人精品 | 91av视频| 日韩在线国产精品 | 成年人在线免费观看视频网站 | 国产一区二区自拍视频 | 在线伊人网 | 91在线一区二区三区 | 久久99草 | 国产日韩一级片 | 六月丁香激情 | 国产中文欧美日韩在线 | 麻豆va | 电影桑叶2在线播放完整版 222aaa | 狠狠操综合网 | 韩国三级中文字幕hd浴缸戏 | 黄色九九 | 三叶草欧洲码在线 | 无码国内精品人妻少妇蜜桃视频 | av在线官网 | 女人18片毛片60分钟 | 成人av在线网址 | 精品理论片 | 久久久久久久久久成人 | av毛片在线免费看 | 老女人网站| 少妇精品一区 | 狠狠操综合网 | 青青青国产 | 丰满人妻在公车被猛烈进入电影 | 亚洲精品第五页 | 都市激情一区 | 欧美 亚洲 一区 | 精品少妇一区二区三区密爱 | 亚洲a v网站 | 亚洲国产综合网 |