Ein Android-Handy weiß eigentlich ganz genau, wo es sich befindet - aber gibt es eine Möglichkeit, das Land anhand eines Ländercodes abzurufen?
Sie müssen die genaue GPS-Position nicht kennen - das Land ist ausreichend
Ich habe zuerst daran gedacht, die Zeitzone zu verwenden, aber eigentlich brauche ich mehr Informationen, da es einen Unterschied macht, ob der Ort New York oder Lima ist.
Hintergrund der Frage: Ich habe eine Anwendung, die Temperaturwerte verwendet, und ich möchte die Standardeinheit entweder auf Celsius oder Fahrenheit einstellen, je nachdem, ob sich der Standort in den USA oder außerhalb befindet
android
geolocation
DonGru
quelle
quelle
Antworten:
Dadurch wird der für das Telefon festgelegte Ländercode (Telefonsprache, NICHT Benutzerstandort) festgelegt:
Sie können auch getCountry () durch getISO3Country () ersetzen , um einen dreistelligen ISO-Code für das Land zu erhalten. Dies erhält den Ländernamen :
Dies scheint einfacher zu sein als die anderen Methoden und hängt von den Lokalisierungseinstellungen des Telefons ab. Wenn ein US-Benutzer im Ausland ist, möchte er wahrscheinlich immer noch Fahrenheit und das funktioniert :)
Anmerkung der Redaktion : Diese Lösung hat nichts mit dem Standort des Telefons zu tun. Es ist konstant. Wenn Sie nach Deutschland reisen, ändert sich das Gebietsschema NICHT. Kurzum: Gebietsschema! = Ort.
quelle
quelle
getSimCountryIso
sagen wirdus
undgetNetworkCountryIso
sagen wirdfr
toLowerCase()
Anruf in änderntoUpperCase()
.Verwenden Sie diesen Link http://ip-api.com/json , hier werden alle Informationen als json bereitgestellt. Von diesem json können Sie das Land leicht bekommen. Diese Site verwendet Ihre aktuelle IP-Adresse und erkennt automatisch die IP- und Sendback-Details.
Docs http://ip-api.com/docs/api:json Hoffe, es hilft.
Beispiel json
Hinweis : Da dies eine Lösung von Drittanbietern ist, verwenden Sie sie nur, wenn andere nicht funktionierten.
quelle
Eigentlich habe ich gerade herausgefunden, dass es noch eine Möglichkeit gibt, einen Ländercode mit der Methode getSimCountryIso () zu erhalten
TelephoneManager
:Da es sich um den Simulationscode handelt, sollte er sich auch bei Reisen in andere Länder nicht ändern.
quelle
Holen Sie sich zuerst den LocationManager. Dann rufen Sie an
LocationManager.getLastKnownPosition
. Erstellen Sie dann einen GeoCoder und rufen Sie anGeoCoder.getFromLocation
. Tun Sie dies in einem separaten Thread! Dadurch erhalten Sie eine Liste derAddress
Objekte. Ruf anAddress.getCountryName
und du hast es verstanden.Denken Sie daran, dass die letzte bekannte Position etwas veraltet sein kann. Wenn der Benutzer gerade die Grenze überschritten hat, wissen Sie möglicherweise eine Weile nichts davon.
quelle
Hier finden Sie eine Komplettlösung, die auf dem LocationManager und als Ersatz für den TelephonyManager und die Standorte des Netzwerkanbieters basiert. Ich habe die obige Antwort von @Marco W. für den Fallback-Teil verwendet (großartige Antwort als solche!).
Hinweis: Der Code enthält PreferencesManager. Dies ist eine Hilfsklasse, die Daten aus SharedPrefrences speichert und lädt. Ich verwende es, um das Land in S "P zu speichern. Ich erhalte das Land nur, wenn es leer ist. Bei meinem Produkt kümmere ich mich nicht wirklich um alle Randfälle (Benutzer reist ins Ausland und so weiter).
quelle
country = addresses.get(0).getCountryName();
in Ihrem Code, der den vollständigen Namen des Landes in die Variable setztcountry
. Gleichzeitig gebengetCountryBasedOnSimCardOrNetwork(Context context)
Sie in der Methode den ISO-Code des Landes zurück. Ich glaube, dass Sie schreiben wolltencountry = addresses.get(0).getCountryCode();
:-)Sie können
getNetworkCountryIso()
von verwendenTelephonyManager
, um das Land zu ermitteln, in dem sich das Telefon gerade befindet (obwohl dies in CDMA-Netzwerken anscheinend unzuverlässig ist).quelle
Ist veraltet. Verwenden Sie stattdessen Folgendes:
quelle
Wenn für einige Geräte die Standardsprache anders eingestellt ist (ein Inder kann dann Englisch (US) einstellen)
gibt einen falschen Wert. Daher ist diese Methode nicht zuverlässig
Die Methode getNetworkCountryIso () von TelephonyManager funktioniert auch nicht auf Geräten ohne SIM-Karte (WIFI-Tablets).
Wenn ein Gerät keine SIM-Karte hat, können wir die Zeitzone verwenden, um das Land zu ermitteln. Für Länder wie Indien wird diese Methode funktionieren
Beispielcode zur Überprüfung des Landes ist Indien oder nicht (Zeitzonen-ID: Asien / Kalkutta)
quelle
Mit GPS mit Längen- und Breitengrad können wir den Ländercode erhalten.
Wenn wir Telefonie verwenden, funktioniert dies nicht, wenn wir keine SIM-Karte verwenden. In der Ländereinstellung wird der Ländercode je nach Sprache falsch angezeigt.
MainActivity.java:
GPSTracker.java:
Log:
E / countryCode: IN
Bearbeiten: Verwenden Sie Fused Location Provider , um Längen- und Breitengrade zu aktualisieren und bessere Ergebnisse zu erzielen.
quelle
Ich habe GEOIP db verwendet und eine Funktion erstellt. Sie können diesen Link direkt nutzen http://jamhubsoftware.com/geoip/getcountry.php
Sie können die Dateien autoload.php und .mmdb von https://dev.maxmind.com/geoip/geoip2/geolite2/ herunterladen.
quelle