簡體   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