【问题标题】:Getting Complete Contact's Phone Number With Country Code, Even if Country Code is Not Entered使用国家代码获取完整的联系人电话号码,即使未输入国家代码
【发布时间】:2018-06-18 22:21:38
【问题描述】:

我正在开发一个具有登录活动的应用程序,在该应用程序中,当用户登录时,它会自动将联系人从他们的手机保存到服务器。这可行,但我有一个问题,当我保存数字时,它们以用户在手机中输入的格式保存。例如,如果用户输入这个号码:+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,所以我想知道是否有办法使用它并获取国家代码,然后将其添加到没有它的号码中。

【问题讨论】:

    标签: java android country-codes libphonenumber mobile-country-code


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答 Rob。如果用户没有我的国家代码,是否有办法将我的国家代码添加到手机中,或者是否有 libphone 技巧可以提供帮助?我认为像 Viber 这样的应用程序会做这样的事情。
    • 嗨@Banana。你如何打开你的问题?你能帮帮我吗?
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2018-02-22
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多