Как программно определить, в какой стране находится устройство Android на данный момент без использования GPS?

Когда мое приложение запускается, я хочу определить название страны текущего местоположения и сделать некоторые вещи для этого конкретного названия страны, я могу легко сделать это с помощью геокодера, GPS. Но я хочу получить его из Locale или если что-нибудь еще доступно.

 Reyjohn25 мая 2012 г., 15:56
На самом деле я хочу избежать всего, что использует интернет, есть ли способ с использованием часового пояса или что-то?
 Andrew Thompson25 мая 2012 г., 15:48
"do some stuff" Какие вещи конкретно?
 psubsee200325 мая 2012 г., 16:04
Часовой пояс не идеален. Если вы просто используете смещение UTC, вы будете знать только приблизительную долготу, но это совсем не поможет. Название часового пояса может быть более точным, но даже тогда слишком много стран имеют общие часовые пояса. Вы никогда не будете уверены, что у вас есть правильный.
 psubsee200325 мая 2012 г., 15:52
Можете ли вы использовать API Google Location Services без GPS? Или вы тоже хотите этого избежать?
 Reyjohn25 мая 2012 г., 15:51
Я хочу сделать конвертер валют, поэтому мне нужно определить местоположение, из которого запускается приложение, и установить валюту по умолчанию для этой страны.

Ответы на вопрос(3)

ужба состоит из трех методов, определенных в их .aidl, которые позволяют вам получить код страны, зарегистрировать прослушиватель или удалить его. В частности, вы хотите первый -Country detectCountry(); который возвращает объект android.location.Country (frameworks / base / location / java / android / location / Country.java в AOSP). Я предполагаю, что вы знаете, как вызывать методы программно (вам потребуется getSystemService (& quot; country_detector & quot;)).

Чтобы проверить из командной строки, попробуйте:

[email protected]:/ $ service call country_detector 1
Result: Parcel(
  0x00000000: 00000000 00000001 00000002 00530055 '............U.S.'
  0x00000010: 00000000 00000003 1d809dda 00000000 '................')

Сериализация объекта в основном представляет собой не что иное, как двухбуквенный код страны (здесь: США), источник (здесь, 3, подразумевающий, что это было взято из локали) и временную метку (1d809dda ...), которая на самом деле не такова, что важный. Вам не нужно беспокоиться о сериализации, поскольку объект является Parcelable.

Решение Вопроса

позволяет ли Android API проверять код провайдера соответствующей сети GSM. Если это возможно, вы можете использовать этот код для проверки, например, в этом списке:http://www.techgsm.com/page/gsm-provider-codes/network-provider-identify-codes.html выяснить, в какой стране находится мобильный телефон.

 25 мая 2012 г., 16:11
+1 Это замечательно ... даже не приходило мне в голову. Код провайдера также называется MCC. Нашел вопрос в другом месте на SO, который может помочь:stackoverflow.com/q/890366/250725 ... хотя, вероятно, не будет работать в режиме самолета.

http://ip-api.com/json , это предоставит всю информацию как JSON. Из этого JSON вы можете легко получить страну. Этот сайт работает с использованием вашего текущего IP-адреса, он автоматически определяет IP-адрес и детали отправки.

Документыhttp://ip-api.com/docs/api:json Надеюсь, поможет.

Это то, что я получил.

{
"as": "AS55410 C48 Okhla Industrial Estate, New Delhi-110020",
"city": "Kochi",
"country": "India",
"countryCode": "IN",
"isp": "Vodafone India",
"lat": 9.9667,
"lon": 76.2333,
"org": "Vodafone India",
"query": "123.63.81.162",
"region": "KL",
"regionName": "Kerala",
"status": "success",
"timezone": "Asia/Kolkata",
"zip": ""

}

 15 июл. 2016 г., 11:44
но у него есть ограничения. их система автоматически блокирует любые IP-адреса, выполняющие более 150 запросов в минуту.

Ваш ответ на вопрос