Как мой телефон (и некоторые приложения) узнает, какой префикс кода страны (например, +1, +505, +49 ...) добавляется к номерам в моих контактах - PullRequest
2 голосов
/ 23 марта 2020

Меня недавно поразило, что в android нет стандартного метода получения кода страны (а я имею в виду + ​​1, + 49, + 39, а не США, GE, IT) вашего собственного телефона. TelephonyManager позволяет получить кучу другой информации, включая двухбуквенный код страны вашего телефона (IN, US, IT ...) или даже вашу симку, но не префикс набора.

после тщательного поиска этой проблемы я обнаружил, что люди решили эту проблему, создав свои собственные базы данных соответствий префиксов country_code (т. Е. {IT, + 39} ...) (см. this ) это звучит безумно (и похоже на трение двух палочек вместе, чтобы сделать XD пожарным) и означало бы, что бесчисленные разработчики пишут каждую свою собственную базу данных по всему миру, чтобы решить проблему, которую должен решить TelephonyManager.

Я нахожу это странно, что некоторые системные приложения, кажется, откуда-то знают этот код. Я, например, могу звонить контактам из-за границы, даже если я сохранил их номер без префикса, а WhatsApp также обычно может вывести правильный префикс.

Какой метод используется моим приложением контактов, чтобы вывести правильный приставка? у него есть своя собственная база данных, которой он не поделится с нами? есть ли причина для этого, как некая проблема безопасности, о которой я не знаю? Как WhatsApp делает это?

Я действительно заинтригован этим. может быть, я достаточно погуглил, и есть метод, но многие люди, похоже, решают его с помощью вышеупомянутого подхода к базе данных.

любая помощь в понимании этого будет принята с благодарностью

1 Ответ

1 голос
/ 23 марта 2020

Это поддерживается библиотекой libphonenumber от Google, см. https://github.com/google/libphonenumber/blob/master/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2373

В основном вы бы сделали что-то вроде этого:

// get region, e.g. "US"
TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String region = telephony.getNetworkCountryIso().toUpperCase(Locale.getDefault());

// get country code from region, e.g. "US" => 1
PhoneNumberUtil libphone = PhoneNumberUtil.createInstance(this);
int code = libphone.getCountryCodeForRegion(region);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...