Intereting Posts
Android: могу ли я включить GPS без перенаправления пользователя на экран настроек, например, в приложении «Google Maps» ActionBar в диалоговом окне диалога Android: Как я могу проверить, реализовано ли устройство с функциями Camera2 api или нет? Как подавить предупреждение «Может быть заменено предупреждением foreach» Множество элементов адаптера синхронизации Android, таких как учетная запись Google? Libgdx странное моделирование – ошибка глубины? Android BottomSheet: находится под панелью инструментов Jar Mismatch Найдено 2 версии android-support-v4.jar в списке зависимостей ListFragment OnListItemClick не вызывается Обратный вызов при отклонении DialogFragment Как получить день, год, часы, мин. Индивидуально от формата даты «yyyy-MM-dd'T'HH: mm: ss.SSSZ»? TextView – различные способы добавления drawable Обновление GUI: Runnables vs Messages Сохранение обслуживания во время изменений ориентации Храните соединение XMPP (используя asmack) в режиме реального времени на Android

Как определить местоположение устройства в Android с использованием IP-адреса

Я разрабатываю приложение для Android. Я хочу определить местоположение устройства, используя его IP-адрес. С чего начать? Ссылки на API Google не являются достаточно убедительными. Благодарю.

Solutions Collecting From Web of "Как определить местоположение устройства в Android с использованием IP-адреса"

Вы должны использовать затем API для получения местоположения с использованием ip.

API Ip2Location

Проверка API геолокации Google Maps

Пример:

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY 

Пример ответа:

 { "location": { "lat": 51.0, "lng": -0.1 }, "accuracy": 1200.4 } 

Ограничения:

Пользователи стандартного API:

2500 бесплатных запросов в день 10 запросов в секунду, для каждого пользователя Включите оплату по мере того, как разблокировать более высокие квоты:

$ 0.50 USD / 1000 дополнительных запросов, до 100 000 в день.

БОЛЬШЕ

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

Одним из таких является api.ipinfodb.com

Например, вы можете определить широту и долготу, отправив запрос, например

  http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key> &ip=74.125.45.100&format=json 

Это возвращает данные в формате json, и вы можете получить ответ в XML, установив format = xml (вам нужно зарегистрироваться, чтобы получить ключ API).

Или вы можете загрузить базу данных по этой и этой ссылке.

Вы можете загружать наборы данных, но у вас постоянно его обновлять.

Я использую это, чтобы получить ip, страну и город устройства

Для проверки вы можете использовать RESTCLIENT , аддон firefox для создания HTTP-запросов.

Просто скопируйте https://addons.mozilla.org/en-us/firefox/addon/restclient/ этот URL-адрес и протестируйте его в RESTCLIENT или просто в адресной строке браузера

Надеюсь это поможет!

Вы можете использовать freegeoip.net .

Это бесплатный сервис с открытым исходным кодом. Вы можете использовать услугу напрямую или запустить ее на своем личном сервере. Он также может легко развертываться в Heroku.

Чтобы получить IP-адрес, просто используйте OkHttp для отправки запроса http / https:

 String url = "https://freegeoip.net/json/" Request mRequest = new Request.Builder() .url(url) .build(); Context mContext // A UI context new OkHttpClient().newCall(mRequest).enqueue(new Callback() { Handler mainHandler = new Handler(mContext.getApplicationContext().getMainLooper()); @Override public void onResponse(Call call, Response response) { String responseBody = null; try { responseBody = response.body().string(); } catch (final IOException e) { mainHandler.post(new Runnable() { @Override public void run() { // handle error } }); } final String finalResponseBody = responseBody; mainHandler.post(new Runnable() { @Override public void run() { // handle response body try { JSONObject locationObject = new JSONObject(finalResponseBody); } catch (JSONException e) { e.printStackTrace(); } } }); } @Override public void onFailure(Call call, final IOException e) { mainHandler.post(new Runnable() { @Override public void run() { mNetworkListener.onNetworkError(e.getMessage()); } }); } }); 

И ответ будет выглядеть примерно так:

 { "ip": "192.30.253.113", "country_code": "US", "country_name": "United States", "region_code": "CA", "region_name": "California", "city": "San Francisco", "zip_code": "94107", "time_zone": "America/Los_Angeles", "latitude": 37.7697, "longitude": -122.3933, "metro_code": 807 }