2017-09-13 167 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实例。 –