Pracuję nad aplikacją na Androida. Chcę określić lokalizację urządzenia przy użyciu jego adresu IP. Gdzie zaczynam? Linki w interfejsach Google API nie są wystarczająco przekonujące. Dzięki.Jak określić lokalizację urządzenia w systemie Android przy użyciu adresu IP
Odpowiedz
Powinieneś użyć następnie odłogiem API do uzyskania lokalizacji przy użyciu ip.
Istnieje kilka web-services, który zapewnia Ci szerokości i długości geograficznej wartość z adresu IP.
jeden taki jest api.ipinfodb.com
ex można szerokości i długości, wysyłając prośbę jak
http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>
&ip=74.125.45.100&format=json
ten zwraca dane w formacie JSON i można dostać odpowiedź w XML, ustawiając format = xml. (Aby uzyskać klucz API, musisz się zarejestrować).
lub można pobrać bazę danych z linku this i this.
możesz pobierać zestawy danych, ale musisz je stale aktualizować.
próbowałem uzyskać klucz API dla tej witryny, ale bezskutecznie. Ciągle prosi o podanie mojej lokalizacji, nawet jeśli ją podałem. Czy chcesz udostępnić swój klucz? –
używam this dostać ip, kraj i miasto urządzeniu
przetestować można użyć RESTCLIENT, firefox addon do wykonywania żądań HTTP.
prostu skopiować https://addons.mozilla.org/en-us/firefox/addon/restclient/ ten URL i wykonaj test w RESTCLIENT lub tuż obok w pasku adresu przeglądarki
Nadzieja pomaga to!
Dobre znalezisko. Bardzo proste użycie tego linku: http://api.hostip.info/get_json.php –
Zamówienie POST Google Maps Geolocation API
Próbka:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
odpowiedź próbki:
{
"location": {
"lat": 51.0,
"lng": -0.1
},
"accuracy": 1200.4
}
Ograniczenia:
Użytkownicy standardowego API:
2500 darmowych zapytań dziennie 10 zapytań na sekundę, dla każdego użytkownika Włącz pay-as-you-go rozliczeń do odblokowania wyższych kwot:
$ 0,50 USD/1000 dodatkowe pytania , do 100 000 dziennie.
Można użyć freegeoip.net.
To bezpłatna usługa typu open source. Możesz skorzystać z usługi bezpośrednio lub uruchomić ją na swoim osobistym serwerze. Można go również łatwo wdrożyć w Heroku.
Aby uzyskać lokalizację IP wystarczy użyć OkHttp aby wysłać żądanie 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());
}
});
}
});
a odpowiedź będzie wyglądać mniej więcej tak:
{
"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
}
niestety, po tylu latach, nic pod tym linkiem działa – SREE