2017-09-13 294 views
1

我能夠在android中檢測來電,但問題是我想知道該電話號碼的國家代碼,以便我可以分析它是國內的還是國內的國際號碼。我知道libphonenumber 但它需要知道區域代碼之前如圖所示的例子獲取給定電話號碼的詳細國家名稱和國家代碼

String swissNumberStr = "044 668 18 00"; 
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); 
try { 
    PhoneNumber swissNumberProto = phoneUtil.parse(swissNumberStr, "CH"); 
} catch (NumberParseException e) { 
    System.err.println("NumberParseException was thrown: " + e.toString()); 
} 

它已經知道把"CH"作爲參數拿到手的國家代碼。但我們不知道該數字是否爲我們所知,那麼我們如何分析該數字。

回答

1

只要它不是一個區域號碼(在這種情況下,它只是一個簡單的數字,並在這個世界上沒有LIB能確定它是),你可以爲parse第二個參數指定"ZZ"null

這就是documentation說:

區域,我們期待數量從。如果被解析的號碼沒有以國際格式寫入,則僅使用 。在這種情況下,該號碼的 country_code將被存儲爲提供的默認區域的 。如果該號碼保證以 開頭的'+'後跟國家代碼,則可以提供「ZZ」或空值 。

在您能夠創建PhoneNumber的實例後,您可以簡單地撥打getRegionCodeForNumber,如下所示。

String swissNumberStr = "044 668 18 00"; 
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); 
try { 
    PhoneNumber numberProto = phoneUtil.parse(swissNumberStr, "ZZ"); 
    System.out.println(phoneUtil.getRegionCodeForNumber(numberProto)); 
} catch (NumberParseException e) { 
    System.err.println("NumberParseException was thrown: " + e.toString()); 
} 
+0

但沒有保證這個數字將與「+」開始,也可以是0321774444或92321774444或0092321774444 –

+0

要麼編號開頭爲00或+,或者你知道擺在首位的國家。我認爲你不能創建一個有意義的PhoneNumber實例。 –