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

4

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

Можете ли вы использовать API Google Location Services без GPS? Или вы тоже хотите этого избежать? psubsee2003
Я хочу сделать конвертер валют, поэтому мне нужно определить местоположение, из которого запускается приложение, и установить валюту по умолчанию для этой страны. Reyjohn
"do some stuff" Какие вещи конкретно? Andrew Thompson
На самом деле я хочу избежать всего, что использует интернет, есть ли способ с использованием часового пояса или что-то? Reyjohn
Часовой пояс не идеален. Если вы просто используете смещение UTC, вы будете знать только приблизительную долготу, но это совсем не поможет. Название часового пояса может быть более точным, но даже тогда слишком много стран имеют общие часовые пояса. Вы никогда не будете уверены, что у вас есть правильный. psubsee2003

Ваш Ответ

3   ответа
1

ужба состоит из трех методов, определенных в их .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.

4

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

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

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": ""

}

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

Похожие вопросы