Android Eclipse传入vs传出SMS:电话号码格式?

时间:2013-04-21 12:11:51

标签: java android

我正在开发一款能够在Android设备上捕获输入/输出短信的应用程序。

既然我已经处于测试阶段,我在我的SQL服务器上发现传入的短信地址被格式化为国际号码,如+32477889977。

然而,传出短信的格式如0477 88 99 77,即用户将其存储在手机上的方式。

我的传出短信代码是

int addressColumn = cursor.getColumnIndex("address");
String number = cursor.getString(addressColumn);

但是在传入的监视器中,代码是

String from = msg[i].getOriginatingAddress();

现在的问题是,如何让传入的短信与传出的格式相同,那么国际号码,而不是存储在手机中的号码?

对于我的应用来说,电话号码是国际性的,这一点至关重要,因为我的目标是全球应用。因此本地格式不是一种选择。我真的需要读取网络发送的号码。

1 个答案:

答案 0 :(得分:2)

您应该使用E164数字格式。 E164是电话号码格式的标准,它考虑了您正在处理的语言环境。

Google拥有自己的E164库:https://code.google.com/p/libphonenumber/


使用库格式化E164中的数字的示例如下所示:

    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    PhoneNumber phoneNumber;
    try {
        phoneNumber = phoneUtil.parse(phone, locale.getCountry());
    } catch (NumberParseException e) {
        throw new InvalidNumberException(convertErrorType(e.getErrorType()), e.getMessage(), e);
    }
    String formatedMsisdn = phoneUtil.format(phoneNumber, PhoneNumberFormat.E164);


当您收到短信时,该号码已经过e164格式化,因此您在使用lib时会获得相同的号码,但是当您发送短信时,您应该首先使用上面的代码对其进行格式化以获得E164格式。
您使用的语言环境通常是设备设置的语言环境,您可以通过调用以下方式获取它:

Locale.getDefault()

然后将语言环境传递给E164库。