[英]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.