1

我正在开发一个在 Android 设备上捕获输入/输出 SMS 的应用程序。

现在,由于我已经处于测试版中,我注意到在我的 SQL 服务器上,传入的 SMS 地址被格式化为国际号码,例如 +32477889977。

但是,传出 SMS 的格式类似于 0477 88 99 77,即用户将其存储在手机上的方式。

我的外发短信代码是

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

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

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

现在的问题是,我怎样才能让传入的短信与传出的格式相同,所以是国际号码,而不是手机中存储的号码?

电话号码是国际的,这对我的应用程序至关重要,因为我的目标是全球应用程序。所以本地格式化不是一种选择。我真的需要阅读网络发送的号码。

4

1 回答 1

2

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

谷歌有他们的 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);


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

Locale.getDefault()

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

于 2013-04-21T12:30:02.730 回答