繁体   English   中英

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

[英]Android Eclipse incoming vs outgoing SMS: Phone number format?

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

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

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

我发送短信的代码是

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

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

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

现在的问题是,如何使传入的短信与传出的短信具有相同的格式,即国际号码,而不是电话中存储的号码?

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

您应该使用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);


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

Locale.getDefault()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM