2013-07-01 1 views
6

Ich schreibe eine App, die die Location Mocking-Möglichkeit in Android nutzt.Mock location verwenden, ohne es in den Einstellungen zu setzen

Was ich erreichen möchte, ist, meinen Standort zu verspotten, ohne das Flag "Erlaube falsche Standorte" in den Entwickleroptionen zu setzen.

Ich weiß, dass es möglich ist, weil Arbeiten mit dieser App ist: https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=en

Was ich versucht:

eine apk generieren, verschieben Sie sie in/system/app, machen einen Neustart
Und Ich habe es auch mit und ohne die Berechtigung ACCESS_MOCK_LOCATION im Manifest versucht.

Aber es alle zu dieser Ausnahme:
Runtime: Kann Aktivität starten: Security: Benötigt sichern ACCESS_MOCK_LOCATION

+0

Ich hätte nichts dagegen, wenn ich fragen würde: Wie funktioniert es mit FakeGPS? Ich habe die App (aus dem Store) installiert, die .apk (base.apk) nach/system/app verschoben und nach dem Neustart funktioniert die App. Allerdings kann ich Orte nicht spoofieren, während "Mock locations zulassen" deaktiviert ist, und wenn ich es einschalte, dann mit der a pp spoof und dann "allow mock locations" ausschalte, endet die Parodie automatisch. Verstand teilen, was ich falsch mache? – Giladiald

+0

Ich benutze diese App nicht mehr. Aber Sie finden die Beschreibung im Playstore nützlich: https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=de – lukassteiner

Antwort

13

I dekompilierten haben com.lexa.fakegps Sie in Frage erwähnt, und wie es dies tun:

private int setMockLocationSettings() { 
    int value = 1; 
    try { 
     value = Settings.Secure.getInt(getContentResolver(), 
       Settings.Secure.ALLOW_MOCK_LOCATION); 
     Settings.Secure.putInt(getContentResolver(), 
       Settings.Secure.ALLOW_MOCK_LOCATION, 1); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return value; 
} 

private void restoreMockLocationSettings(int restore_value) { 
    try { 
     Settings.Secure.putInt(getContentResolver(), 
       Settings.Secure.ALLOW_MOCK_LOCATION, restore_value); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

/* every time you mock location, you should use these code */ 
int value = setMockLocationSettings();//toggle ALLOW_MOCK_LOCATION on 
try { 
    mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, fake_location); 
} catch (SecurityException e) { 
    e.printStackTrace(); 
} finally { 
    restoreMockLocationSettings(value);//toggle ALLOW_MOCK_LOCATION off 
} 

Da die Ausführungszeit dieser Code sehr kurz ist, andere Anwendungen kann kaum die Änderung der ALLOW_MOCK_LOCATION erkennen.

Darüber hinaus müssen Sie,
1. benötigen Root-Zugriff auf Ihr Gerät
2. bewegen Ihre App /system/app oder /system/priv-app

ich es in meinem Projekt versucht, und es funktioniert gut.

+0

Funktioniert das für Marshmallow? – Marlon

+0

Ich habe diesen Code nicht in Marshmallow zuvor versucht, aber es funktioniert für Lollipop. @ Marlon – PageNotFound

+1

Ja, es scheint nicht in Marshmallow zu arbeiten, Seit Google die System-Mock-Einstellungen zu einem App-Picker aktualisiert habe, kann ich das nicht bekommen arbeite mehr. Ich habe com.incorporateapps.fakegps dekompiliert, weil Benutzer sagen, dass es das in Marshmallow tun kann. Der Code sieht oben genauso aus, aber es funktioniert nicht für mich, ich weiß nicht, was ich vermisse. Kannst du es dir anschauen? @PageNotFound – Marlon

2

Einstellung Sie Root-Zugriff auf das Gerät, das zu tun erfordern würden.

+0

Ich habe Root-Zugriff auf das Gerät. Ansonsten hätte ich die apk nicht nach/system/app bewegen können. – lukassteiner