Получение полного номера телефона контакта с кодом страны, даже если код страны не введен

Я работаю над приложением, в котором есть активность входа в систему, в которой, когда пользователь входит в систему, он автоматически сохраняет контакты со своего телефона на сервер. Это работает, но у меня есть одна проблема: когда я сохраняю номера, они сохраняются в формате, который пользователь ввел в свой телефон. Например, если пользователь ввел этот номер: +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, поэтому мне было интересно, есть ли способ использовать это и получить код страны, а затем добавить его к номеру без него.


person Banana    schedule 09.01.2018    source источник


Ответы (1)


Невозможно. Если пользователь не вводит код страны или код города, то при вызове этого номера поставщик услуг автоматически предполагает, что он использует код страны / код города, в котором он сейчас находится. Если у вас есть 518-222-2345 сохранены, и вы звоните по этому номеру в США, поставщик услуг добавит +1 в начало. Если затем пользователь отправляется в Великобританию и пытается позвонить по тому же номеру (контакт-запись), поставщик услуг добавит код +44 впереди. Короче говоря, данные, которые вы видите, - это все данные, которые хранятся на устройстве, и когда эти конкретные данные (код страны / код города) отсутствуют, поставщик услуг принимает коды того места, где они находятся в настоящее время.

person RobOhRob    schedule 09.01.2018
comment
Спасибо за ответ, Роб. Есть ли способ добавить код моей страны на телефон, если у пользователя его нет, или есть уловка с libphone, которая может помочь? Я думаю, что такие приложения, как Viber, делают что-то подобное. - person Banana; 10.01.2018
comment
Привет @Banana. Как вы открываете свою проблему? Не могли бы вы мне помочь? - person Yury Matatov; 02.02.2021