【问题标题】:android Convert phone number in International Formatandroid 转换国际格式的电话号码
【发布时间】:2011-01-16 06:14:01
【问题描述】:

我想知道是否可以转换电话号码 拨出电话时转换为国际格式。

例如,如果一个法国用户(对不起,这是我知道的唯一格式 不会出错 :-) 尝试使用国家格式调用: 01.47.12.34.56 然后一个方法会将其转换为国际格式 像这样:+33.1.47.12.34.56

我查看了 PhoneNumberUtils 的文档,但我不知道是否 有一种方法可以做我想做的事。

【问题讨论】:

标签: android phone-number


【解决方案1】:

旧帖子,但如果对任何人有帮助:使用 google 的 libphonenumber 库对电话号码进行各种格式化和验证。在这种特殊情况下,要转换为国际格式,请使用同一库中 PhoneNumberUtil 类中的 format(PhoneNumber number, PhoneNumberFormat format) api。

【讨论】:

  • 不幸的是,libphonenumber 仅在您知道所提供电话号码的国家代码时才有帮助。从文本中生成PhoneNumber 的所有PhoneNumberUtil 方法都要求数字以+ 和国家代码(例如+447771234567)开头,或者必须具有指定数字的预期国家代码。您可能认为libphonenumber 能够接受任何格式的电话号码字符串并尝试识别国家代码,但事实并非如此。
  • @Phil,该应用可以访问 SIM 卡位置以获取国家代码。
  • @user908821 感谢您提供非常有用的提示。还没来得及调查这件事,所以你为我节省了几个小时!
  • @phil,你可能对这个使用 libphonenumber 对联系人列表进行格式化的应用感兴趣https://play.google.com/store/apps/details?id=angel.twitch
  • @AngelKoh 这种方法并不总是像这里提到的那样可靠developer.android.com/reference/android/telephony/…
【解决方案2】:

数字不是以字符串形式出现的吗?

如果我没记错的话,使用 Java 的字符串方法你可以自己轻松地做到这一点?

所以获取字符串,去掉 0 并添加 +33

【讨论】:

  • 但是如何以编程方式检索国家代码? (33 仅适用于法国)
【解决方案3】:

使用此方法将您的本地号码转换为国际格式,我正在使用谷歌库 https://github.com/google/libphonenumber (Aswin Kumar)提到

Java

   public static String formatPhoneNumber(String phoneNumber) {
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    Phonenumber.PhoneNumber formattedNumber = null;
    String formatted = null;

    try {
        TelephonyManager manager = (TelephonyManager) sContext.getSystemService(Context.TELEPHONY_SERVICE);
        String countryCode = manager.getNetworkCountryIso();
        formattedNumber = phoneUtil.parse(phoneNumber, countryCode.toUpperCase());
        formatted = phoneUtil.format(formattedNumber, PhoneNumberUtil.PhoneNumberFormat.E164);
        return formatted;
    } catch (NumberParseException e) {
        e.printStackTrace();
    }
    return null;
}

科特林

    private fun formatNumber(number: String?) {
    val phoneUtil = PhoneNumberUtil.getInstance()
    var formattedNumber: PhoneNumber? = null
    var formatted: String? = null
    try {
        val manager = applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        val networkCountryIso: String = manager.networkCountryIso
        Log.i("SERVICE " , "ISO "+ networkCountryIso)
        formattedNumber = phoneUtil.parse(number, networkCountryIso.toUpperCase())
        formatted = phoneUtil.format(formattedNumber, PhoneNumberUtil.PhoneNumberFormat.E164)
        Log.i("SERVICE " , "phone number"+ formatted)
        findCallerId(formatted)
    } catch (e: NumberParseException) {
        e.printStackTrace()
    }
}

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多