android获取手机号码的归属地以及运营商,本地查询 您所在的位置:网站首页 电话归属地查询手机号码 android获取手机号码的归属地以及运营商,本地查询

android获取手机号码的归属地以及运营商,本地查询

2024-06-05 19:43| 来源: 网络整理| 查看: 265

方式一、本地数据库匹配

应用网上的电话号归属地db数据进行匹配查询。

如若查不到可用此地址,包含3W+数据匹配。资源地址:https://download.csdn.net/download/lemon_husky/11942253

第一步:下载DB数据库资源放入APP得assets文件夹中,如下图所示:

第二步:通过代码将assets的数据库资源转移到app的数据库中: //将assets文件夹的归属地数据库拷贝到本地数据库 public static void copyMobileNumberDb(){ File file = new File(MyApp.getAppContext().getFilesDir(),"mobileNumber.db"); if(file.exists()&&file.length()>0){ }else{ AssetManager am = MyApp.getAppContext().getAssets(); byte[] buffer = new byte[1024]; try { InputStream is = am.open("mobileNumber.db"); FileOutputStream fis = new FileOutputStream(file); int len = 0; while((len=is.read(buffer))>0){ fis.write(buffer,0,len); } } catch (IOException e) { e.printStackTrace(); } } } 第三步:生成一个实体类用于存放查询到的信息 public class MobileNumInfo { private String name; //姓名 private String number; //电话号 private String belongPlace; //归属地 private String netName; //运营商 public String getBelongPlace() { return belongPlace; } public void setBelongPlace(String belongPlace) { this.belongPlace = belongPlace; } public String getNetName() { return netName; } public void setNetName(String netName) { this.netName = netName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } } 第四步:利用查询方法查询到我们需要的数据,如果有返回返回实体类。 //本地数据库路径 private static String path = "data/data/你的包名/files/mobileNumber.db"; //通过电话号码获取归属地 public static MobileNumInfo getAddress(String number) { MobileNumInfo info = new MobileNumInfo(); info.setNumber(number); String phoneNumber = info.getNumber().replace(" ", ""); File file = new File(path); if (file.exists()) { try { if (phoneNumber.matches("^1[3456789]\\d{9}$")) { String sql = "select * from Mobile where Mobile = ?"; SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); Cursor cursor = database.rawQuery(sql, new String[]{phoneNumber.substring(0, 7)}); while (cursor.moveToNext()) { String province = cursor.getString(cursor.getColumnIndex("Province")); String city = cursor.getString(cursor.getColumnIndex("City")); if (province.equals(city)) { info.setBelongPlace(city); } else { info.setBelongPlace(province + " " + city); } info.setNetName(cursor.getString(cursor.getColumnIndex("Crop")).substring(2)); } cursor.close(); database.close(); } else { //匹配不到归属地,显示未知号码 info.setBelongPlace("未知"); info.setNetName(""); } }catch (Exception e){ info.setBelongPlace("未知"); info.setNetName(""); } } return info; } 方式二、依赖谷歌libphonenumber库实现: 方法一:采用implementation引用依赖:

开源库地址:https://github.com/googlei18n/libphonenumber

//谷歌电话号码归属地库 implementation 'com.googlecode.libphonenumber:libphonenumber:8.10.3' implementation 'com.googlecode.libphonenumber:carrier:1.99' implementation 'com.googlecode.libphonenumber:geocoder:2.99' implementation 'com.googlecode.libphonenumber:prefixmapper:2.109' 方法二:采用jar包引用依赖方式,下载链接中的jar包,carrier-1.99.jar,geocoder-2.99.jar,prefixmapper-2.99.jar,libphonenumber-8.9.9.jar

jar包下载地址:http://repo1.maven.org/maven2/com/googlecode/libphonenumber/

将下载好的jar包放在android项目中的libs文件夹中:

在build.gradle中添加如下代码:

dependencies { implementation files('libs/carrier-1.99.jar') implementation files('libs/geocoder-2.99.jar') implementation files('libs/libphonenumber-8.9.9.jar') implementation files('libs/prefixmapper-2.99.jar') } 选择一个方式引用好依赖后实现查询归属地功能,功能代码如下: public class MobileNumberUtils { private static PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); private static PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper.getInstance(); private static PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance(); private static String LANGUAGE ="CN"; //获取手机号码运营商 public static String getCarrier(Context context, String phoneNumber, int countryCode) { Phonenumber.PhoneNumber referencePhonenumber = new Phonenumber.PhoneNumber(); try { referencePhonenumber = phoneNumberUtil.parse(phoneNumber,LANGUAGE ); } catch (NumberParseException e) { e.printStackTrace(); } //返回结果只有英文,自己转成成中文 String carrierEn = carrierMapper.getNameForNumber(referencePhonenumber, Locale.ENGLISH); String carrierZh = ""; if (countryCode == 86 && Locale.CHINA.getCountry().equals(Locale.getDefault().getCountry())) { switch (carrierEn) { case "China Mobile": carrierZh += "中国移动"; break; case "China Unicom": carrierZh += "中国联通"; break; case "China Telecom": carrierZh += "中国电信"; break; default: break; } return carrierZh; } else { return carrierEn; } } //获取手机号码归属地 public static String getGeo(String phoneNumber){ Phonenumber.PhoneNumber referencePhonenumber = null; try { referencePhonenumber = phoneNumberUtil.parse(phoneNumber, LANGUAGE); } catch (NumberParseException e) { e.printStackTrace(); } //手机号码归属城市 referenceRegion return geocoder.getDescriptionForNumber(referencePhonenumber, Locale.CHINA); } }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有