我正在开发一款能够在Android设备上捕获输入/输出短信的应用程序。
既然我已经处于测试阶段,我在我的SQL服务器上发现传入的短信地址被格式化为国际号码,如+32477889977。
然而,传出短信的格式如0477 88 99 77,即用户将其存储在手机上的方式。
我的传出短信代码是
int addressColumn = cursor.getColumnIndex("address");
String number = cursor.getString(addressColumn);
但是在传入的监视器中,代码是
String from = msg[i].getOriginatingAddress();
现在的问题是,如何让传入的短信与传出的格式相同,那么国际号码,而不是存储在手机中的号码?
对于我的应用来说,电话号码是国际性的,这一点至关重要,因为我的目标是全球应用。因此本地格式不是一种选择。我真的需要读取网络发送的号码。
答案 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库。