当前位置: 首页 > 知识库问答 >
问题:

获取带有国家代码的完整联系人电话号码,即使未输入国家代码

鲜于煜祺
2023-03-14

我正在开发一个具有登录活动的应用程序,当用户登录时,它会自动将联系人从手机保存到服务器。这是可行的,但我有一个问题,当我保存号码时,它们是以用户在手机中输入的格式保存的。例如,如果用户输入此号码:15555555,则将按此方式保存,但如果用户输入此号码时没有国家代码,则显示为:5555555,没有1,或任何其他国家代码,具体取决于国家。

我想要的是返回我所有的联系人,他们的国家代码,甚至那些用户已经输入没有国家代码。

Viber等一些应用程序可以识别其格式,因此如果它不是以1开头,或以05开头。。,它被识别并自动添加国家/地区代码,以便05。。变成15。。。

public void updateContacts() {

    String[] PROJECTION = new String[]{
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.NUMBER
    };

    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, null);
    HashMap<String, String> user = db.getUserDetails();
    String userId = user.get("uid");

    if (phones != null) {
        while (phones.moveToNext()) {
            if (phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER) != -1) {
                final String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

                Call<ContactsResponse> call = apiService.contactExists(phoneNumber, userId);
                call.enqueue(new Callback<ContactsResponse>() {
                    @Override
                    public void onResponse(Call<ContactsResponse> call, retrofit2.Response<ContactsResponse> response) {
                        Log.e(TAG, "abc");
                    }

                    @Override
                    public void onFailure(Call<ContactsResponse> call, Throwable t) {
                        Log.e(TAG, t.toString());
                    }
                });
            }
        }
    }

    if (phones != null) {
        phones.close();
    }
}

我正在使用libphonenumber,所以我想知道是否有一种方法可以使用它并获取国家代码,然后将其添加到没有它的数字中。

共有1个答案

别浩漫
2023-03-14

不可能。如果用户没有输入国家代码或区号,那么当调用该号码时,服务提供商将自动假设他们正在使用他们当前所在的国家代码/区号。如果您保存了518-222-2345,并且您在美国拨打了这个号码,服务提供商将在开头添加1。如果用户随后前往英国并尝试拨打相同的号码(联系人条目),服务提供商将在前面添加一个44代码。长话短说,您看到的数据是存储在设备上的所有数据,当特定数据(国家代码/地区代码)不存在时,服务提供商假设它们当前位置的代码。

 类似资料:
  • 我可以在Android系统中检测来电,但问题是我想知道那个电话号码的国家代码,这样我就可以分析它是国家号码还是国际号码。我知道libphonenumber,但它需要事先知道地区代码才能获得国家代码,如示例所示 它已经知道把作为参数。但是我们不知道这个数字是否为我们所知,那么我们如何分析这个数字。

  • 问题内容: 我想从iOS 9上的CNContact获取国家代码和电话号码。我尝试了很多事情,但找不到方法。我获得的最佳结果是打印: 这是我的方法: 我想要的是countryCode和数字的值。有什么想法如何在Swift中访问它们吗?谢谢! 问题答案: 不幸的是,由于它们是私有的,您无法获得它们。 这行得通,但是如果您在此行中做某事, 您的应用很可能会被拒绝。 您可以在这里看到所有可以使用的好东西。

  • 我有这样一个字符串:33123456789(法语电话号码)。我想在不知道国家的情况下提取国家代码(33)。例如,如果我有另一部来自另一个国家的手机,它应该可以工作。我使用谷歌图书馆https://code.google.com/p/libphonenumber/. 如果我知道国家,那很酷,我可以找到国家代码: 但是我找不到一种在不了解国家的情况下解析字符串的方法。

  • 问题内容: 我已经找到了针对Objective-C的答案,但是林先生很难迅速做到这一点。 我用它来获取当前位置的国家代码: 但是,如何将该国家/地区代码转换为国家/地区名称,例如在此示例中,将“ US”转换为“ United States”? 问题答案: 迅捷3

  • 我需要在UITextField中显示电话号码格式作为占位符。我怎么能那样做? 对于国家选择,我使用下面提到的库,它提供了针对用户选择的国家的国旗和国家代码。 https://github.com/NikKovIos/NKVPhonePicker 选择国家后,我需要显示所选国家的电话号码格式,提交该电话号码时,我必须验证电话号码。 我还发现,第三方(PhoneNumberKit)的灵感来源于谷歌的l

  • 我的电话号码是字符串,如“91 96001 64500”(从google places API获取数据),我想提取电话号码(不带国家代码)以及国家代码,而不知道国家(国家可以是任何国家)。我怎样才能在弗利特做到这一点。 注意:已经有另一个完全相同的问题被问到,从电话号码[libphonenumber]中提取代码国家,但它是针对android的,我希望它是针对Flatter的。