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