2015-03-06 6 views
5

Ich muss das Land (iso3) bestimmen, in dem sich das Gerät befindet, auch wenn auf dem Gerät des Geräts GPS ausgeschaltet ist und Apps nicht auf ihren Standort zugreifen können.Wie kann der aktuelle Standort eines Android-Geräts unabhängig von den Einstellungen des Benutzerstandorts ermittelt werden?

Ich muss auch für Tabletten, die keine SIM-Karte haben und somit TelefonieManager nicht verwenden können.

Aus diesem Grund glaube ich nicht, dass ich den Standort-Manager (aus diesen Gründen auch: LocationManager requestLocationUpdates doesn't work) verwenden können

Der Ansatz, den ich Ich brauche ich denke, ist eine einfache HTTP-Anforderung an einen Dritten zu machen IP-Adresse api: z http://www.ipinfodb.com/ip_location_api.php oder https://freegeoip.net

Ist dies der beste Weg, es zu tun? Was ist die beste offene API zu verwenden?

+0

Halten VPNs und Unternehmensnetzwerke im Auge behalten. Ein bestimmtes Firmennetzwerk führte dazu, dass ich mich nach Taiwan verlagerte, wenn ich in Indien bin. Ihre Nutzer wären verärgert, wenn sie eine Lizenz für die Verwendung Ihrer App in Indien haben, aber Ihre App öffnet ein Dialogfeld mit der Meldung "Sorry, Taiwan wird nicht unterstützt." –

Antwort

5

Ihr Ansatz von Drittanbieter-IP-Standort-API scheint derzeit richtig. Mai werden Sie Dies würde helfen,

http://ip-api.com/docs/api:json

http://ip-api.com/json

+0

Dieser Dienst scheint gut zu funktionieren, aber welcher Dienst ist das? Es gibt keine Informationen über die Regeln des Dienstes. – JohnRock

+0

Laut meiner F & E und Erfahrung ist das nicht – Sadiq

+0

Ich werde dies als richtig markieren, obwohl ich nicht den oben genannten Dienst verwende, entschied ich mich für einen benutzerdefinierten API-Endpunkt, den wir gebaut, um diese Frage zu beantworten, anstatt auf das Gerät verlassen. – JohnRock

3

Sie können die TelephonyManager verwenden

TelephonyManager tm = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE); 
String countryCode = tm.getNetworkCountryIso(); 

Update: Da Sie nicht Telefonie nutzen kann ich würde das empfehlen, versuchen, wie es der Benutzer Eingang erhalten ist aus, wenn sie Setup das Gerät.

String locale = context.getResources().getConfiguration().locale.getCountry(); 
+0

Tabletten ohne SIM-Karten haben keinen TelephonyManager, daher kann ich mich nicht darauf verlassen. Ich habe meine Frage aktualisiert, um das zu berücksichtigen. Danke – JohnRock

+0

Das ist eine interessante Idee. Ich habe es nicht versucht, aber ist das spoofable? Ich konnte mich nicht auf etwas verlassen, das ein Benutzer ad hoc einstellen könnte. – JohnRock

+0

Ich bin mir nicht sicher, kann ich fragen, wofür Sie das verwenden? –