Мобильный телефон Android действительно хорошо знает, где он находится, но есть ли способ получить страну по чему-то вроде кода страны?
Нет необходимости знать точное местоположение по GPS - достаточно страны
Сначала я подумал об использовании часового пояса, но на самом деле мне нужно больше информации, так как это имеет значение, если местоположение - Нью-Йорк или Лима.
Предыстория вопроса: у меня есть приложение, которое использует значения температуры, и я хотел бы установить единицу измерения по умолчанию: Цельсий или Фаренгейт, в зависимости от того, находится ли местоположение в США или за его пределами.
android
geolocation
DonGru
источник
источник
Ответы:
В результате будет установлен код страны для телефона (язык телефона, а НЕ местоположение пользователя):
также можно заменить getCountry () на getISO3Country (), чтобы получить трехбуквенный код ISO для страны. Это получит название страны :
Это кажется проще, чем другие методы, и полагаться на настройки локализации на телефоне, поэтому, если пользователь из США находится за границей, он, вероятно, все еще хочет Фаренгейта, и это сработает :)
Примечание редакции : это решение не имеет ничего общего с расположением телефона. Это постоянно. Когда вы поедете в Германию, регион НЕ изменится. Вкратце: locale! = Location.
источник
источник
getSimCountryIso
он скажетus
иgetNetworkCountryIso
скажетfr
toLowerCase()
вызов наtoUpperCase()
.Используйте эту ссылку http://ip-api.com/json , она предоставит всю информацию в формате json. Из этого json вы можете легко получить страну. Этот сайт работает с вашим текущим IP, он автоматически определяет IP и детали обратной отправки.
Документы http://ip-api.com/docs/api:json Надеюсь, это поможет.
Пример json
Примечание . Поскольку это решение стороннего производителя, используйте его только в том случае, если другие не работают.
источник
На самом деле я только что узнал, что есть еще один способ получить код страны, используя метод getSimCountryIso ()
TelephoneManager
:Поскольку это сим-код, он также не должен изменяться при поездках в другие страны.
источник
Сначала получите LocationManager. Тогда позвони
LocationManager.getLastKnownPosition
. Затем создайте GeoCoder и позвонитеGeoCoder.getFromLocation
. Сделайте это в отдельной ветке !! Это даст вам списокAddress
объектов. Звоните,Address.getCountryName
и все готово.Имейте в виду, что последняя известная позиция может быть немного устаревшей, поэтому, если пользователь только что пересек границу, вы можете не знать об этом некоторое время.
источник
Вот полное решение, основанное на LocationManager и в качестве запасных вариантов TelephonyManager и местоположения сетевого провайдера. Я использовал приведенный выше ответ от @Marco W. для резервной части (отличный ответ сам по себе!).
Примечание: код содержит PreferencesManager, это вспомогательный класс, который сохраняет и загружает данные из SharedPrefrences. Я использую его, чтобы сохранить страну в S'P, я получаю страну только в том случае, если она пуста. Что касается моего продукта, меня не волнуют все крайние случаи (пользователь уезжает за границу и так далее).
источник
country = addresses.get(0).getCountryName();
в вашем коде, который поместит в переменную полное название страныcountry
. В то же время в методеgetCountryBasedOnSimCardOrNetwork(Context context)
вы возвращаете ISO-код страны. Я считаю, что вы хотели написатьcountry = addresses.get(0).getCountryCode();
:-)Вы можете использовать
getNetworkCountryIso()
from,TelephonyManager
чтобы получить страну, в которой в настоящее время находится телефон (хотя, очевидно, это ненадежно в сетях CDMA).источник
Устарела. Используйте вместо этого:
источник
Для некоторых устройств, если установлен другой язык по умолчанию (индиец может установить английский (США)), тогда
даст неправильное значение. Таким образом, этот метод ненадежен
Кроме того, метод getNetworkCountryIso () в TelephonyManager не будет работать на устройствах, у которых нет SIM-карты (планшеты WIFI).
Если на устройстве нет SIM-карты, мы можем использовать часовой пояс, чтобы получить страну. Для таких стран, как Индия, этот метод подойдет
образец кода, используемый для проверки, является ли страна Индия или нет (идентификатор часового пояса: asia / calcutta)
источник
Используя GPS с широтой и долготой, мы можем получить код страны.
Если мы используем телефонию, это не сработает, если мы не используем сим-карту, и в локали, в зависимости от языка, код страны отображается неправильно.
MainActivity.java:
GPSTracker.java:
Журнал:
E / countryCode: IN
Изменить: используйте Fused Location Provider, чтобы получить обновление широты и долготы для лучшего результата.
источник
Я использовал GEOIP db и создал функцию. Вы можете использовать эту ссылку напрямую http://jamhubsoftware.com/geoip/getcountry.php
вы можете скачать файлы autoload.php и .mmdb с https://dev.maxmind.com/geoip/geoip2/geolite2/
источник