You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio中如何通过手机号码获取国家及州信息

通过手机号码获取国家及州信息(Android Studio实现方案)

一、获取国家信息:用Google libphonenumber库

这是行业内最常用的靠谱方案,Google官方维护的号码解析库,支持全球绝大多数国家的号码格式解析。

步骤1:添加依赖

在Module级别的build.gradle.kts(或build.gradle)中引入依赖:

// Kotlin DSL示例
dependencies {
    implementation("com.googlecode.libphonenumber:libphonenumber:8.13.26")
    implementation("com.googlecode.libphonenumber:geocoder:8.13.26") // 用于地理编码解析
}

步骤2:解析号码获取国家信息

示例Kotlin代码:

import com.google.i18n.phonenumbers.PhoneNumberUtil
import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder
import java.util.Locale

fun getCountryFromPhone(phoneNumber: String): String? {
    val phoneUtil = PhoneNumberUtil.getInstance()
    return try {
        // 自动识别国家代码并解析号码
        val numberProto = phoneUtil.parse(phoneNumber, null)
        // 获取对应国家的中文名称
        val geocoder = PhoneNumberOfflineGeocoder.getInstance()
        geocoder.getRegionDisplayName(numberProto, Locale.CHINESE)
    } catch (e: Exception) {
        // 处理号码格式错误、无法识别的情况
        null
    }
}

如果需要获取国家代码(如CN、US),可调用phoneUtil.getRegionCodeForCountryCode(numberProto.countryCode)直接获取。

二、获取州/地区信息:两种可行思路

手机号本身不会直接携带州级信息,只能通过号码的区号前缀匹配对应区域,以下是两种落地方式:

方式1:维护本地区号-区域映射表

针对你需要覆盖的国家,手动维护区号与州/地区的对应关系,适合只支持特定国家的场景,无需联网。示例:

// 示例:中国区号-省份/城市映射
val chinaAreaCodeMap = mapOf(
    "010" to "北京市",
    "021" to "上海市",
    "020" to "广东省广州市",
    "0755" to "广东省深圳市"
    // 按需补充更多区域映射
)

fun getStateForChinaPhone(phoneNumber: String): String? {
    val phoneUtil = PhoneNumberUtil.getInstance()
    return try {
        val numberProto = phoneUtil.parse(phoneNumber, "CN")
        // 提取国内区号(去掉国家代码86后的前缀)
        val nationalNum = numberProto.nationalNumber.toString()
        val areaCode = when {
            nationalNum.startsWith("0") && nationalNum.length >= 3 -> nationalNum.substring(0, 3)
            nationalNum.startsWith("0") && nationalNum.length >= 4 -> nationalNum.substring(0, 4)
            else -> null
        }
        areaCode?.let { chinaAreaCodeMap[it] }
    } catch (e: Exception) {
        null
    }
}

方式2:集成本地地理编码数据库

如果需要支持多国家,可以将开源的号码区域数据集打包到APP中(比如libphonenumber的geocoder库仅提供到国家/大区域的信息,不足以覆盖州级)。你可以找一些开源的号码区域数据集,转换成本地JSON或SQLite数据库,通过区号查询匹配对应的州信息。

注意事项

  • 优先让用户选择国家代码,再输入手机号,能大幅降低解析错误概率;
  • 必须处理异常:无效号码、不支持的国家、区号未覆盖等情况;
  • libphonenumber的geocoder库仅提供粗略的区域信息,州级精准匹配需自行补充映射数据。

内容的提问来源于stack exchange,提问作者Bittoo Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:02:22