Cómo determinar la ubicación del dispositivo en Android mediante la dirección IP
Estoy desarrollando una aplicación de Android. Quiero determinar la ubicación del dispositivo utilizando su dirección IP. ¿Dónde empiezo? Los enlaces en las API de Google no son lo suficientemente concluyentes. Gracias.
- ¿Google ofrece una API que puedo usar para obtener la ubicación de mi teléfono?
- Error al agregar geofences en Android (código de estado 1000)
- ¿Existe una alternativa al Cliente de ubicación (API de Google Play)?
- Navigator.geolocation.getCurrentPosition siempre obtiene un código de error 3: timeout expirado
- JavaScript La geolocalización no funciona en todos los navegadores de Android: funciona en iOS y PC
- ¿Qué dispositivos admiten Android Batching de sensores?
- LocationClient vs LocationManager
- ¿Dónde estoy? - Obtener país
- ¿Cómo determinar la ubicación actual de un dispositivo Android, independientemente de la configuración de la ubicación del usuario?
- Cómo mostrar mi ubicación en Google Maps para Android API v2
- ¿Cómo comprobar si la ubicación está disponible utilizando FusedLocationProviderApi y GoogleClient?
- LocationListener funciona en el emulador, no en el teléfono
- Guardar ubicación de red como un archivo .txt (sin utilizar GPS)
Debería utilizar entonces fallowing API para obtener ubicación mediante ip.
API de Ip2Location
Realizar Pedido API de Geolocalización de Google Maps
Ejemplo de POST:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
Ejemplo de respuesta:
{ "location": { "lat": 51.0, "lng": -0.1 }, "accuracy": 1200.4 }
Límites:
Usuarios de la API estándar:
2.500 consultas gratuitas por día 10 consultas por segundo, por usuario Active la facturación de pago a medida para desbloquear cuotas más altas:
$ 0.50 USD / 1000 consultas adicionales, hasta 100.000 diarios.
MÁS
Hay varios servicios web, que le proporcionan el valor de latitud y longitud de la dirección IP.
Uno de ellos es api.ipinfodb.com
Por ejemplo, puede latitud y longitud enviando solicitud como
http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key> &ip=74.125.45.100&format=json
Esto devuelve los datos en formato json y puede obtener respuesta en XML configurando format = xml. (Necesita registrarse para obtener su clave de API).
O puede descargar la base de datos de este y este enlace.
Puede descargar conjuntos de datos, pero u tiene que actualizar constantemente.
Yo uso esto para obtener ip, país y ciudad del dispositivo
Para probar, puede utilizar RESTCLIENT , el complemento firefox para realizar peticiones HTTP.
Simplemente copie https://addons.mozilla.org/en-us/firefox/addon/restclient/ esta URL y pruebe en RESTCLIENT o simplemente pasado en la barra de direcciones del navegador
¡Espero que esto ayude!
Puede utilizar freegeoip.net .
Es un servicio gratuito de código abierto. Puede utilizar el servicio directamente o ejecutarlo en su servidor personal. También se puede desplegar a Heroku con bastante facilidad.
Para obtener la ubicación IP, simplemente use OkHttp para enviar una solicitud 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()); } }); } });
Y la respuesta se verá como algo así:
{ "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 }
- Error Gradle – No se puede llamar IncrementalTask.taskAction () en la tarea ': project: mergeDebugResources'
- Hacer que Android hable con Apache en localhost