2013-07-01 11 views
6

Sto scrivendo un'app che sfrutta la possibilità di simulazione di posizione in Android.Usa la posizione fittizia senza impostarla nelle impostazioni

Quello che mi piacerebbe fare è prendere in giro la mia posizione senza impostare il flag "Consenti posizioni simulate" nelle opzioni sviluppatore.

So che è possibile, perché è funziona con questa app: https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=en

Quello che ho cercato:

generare un apk, spostarlo in/system/app, fare un reboot
E Ho anche provato con e senza il permesso ACCESS_MOCK_LOCATION nel manifest.

Ma tutto portare a questa eccezione:
RuntimeException: Impossibile avviare attività: SecurityException: Richiede ACCESS_MOCK_LOCATION sicuro impostazione

+0

Mi piacerebbe che mi chieda: come funziona con FakeGPS? Ho installato l'app (dal negozio), spostato il .apk (si chiama base.apk) in/system/app, e dopo il riavvio l'app funziona. Tuttavia, non posso spoofing posizioni mentre "consentire posizioni simulate" è spento, e se lo accendo, spoofare utilizzando un pp e quindi girare "consentire posizioni fittizie", la parodia automaticamente termina. Stai pensando che cosa sto sbagliando? – Giladiald

+0

Non uso più questa app. Ma potresti trovare la descrizione nel playstore utile: https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=en – lukassteiner

risposta

13

Ho decompilato com.lexa.fakegps lei ha citato in oggetto, e che cosa fare in questo modo:

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 
} 

Poiché il tempo di esecuzione di questi codici è molto breve, altre applicazioni difficilmente può rilevare il cambiamento di ALLOW_MOCK_LOCATION.

Inoltre è necessario,
1. richiedono accesso root al dispositivo
2. Spostare l'app per /system/app o /system/priv-app

ho provato nel mio progetto e funziona benissimo.

+0

Funziona per Marshmallow? – Marlon

+0

Non ho provato questo codice in Marshmallow prima, ma funziona per Lollipop. @ Marlon – PageNotFound

+1

Sì, non sembra funzionare in marshmallow, dal momento che google ha aggiornato le impostazioni di simulazione del sistema a un selettore di app, non posso ottenere questo lavoro più. Ho decompilato com.incorporateapps.fakegps perché gli utenti dicono che può farlo in marshmallow. Il codice sembra lo stesso sopra ma non funziona per me, non so cosa mi manchi. Puoi guardarlo? @PageNotFound – Marlon

2

si richiederebbe l'accesso root al dispositivo per farlo.

+0

Ho accesso root al dispositivo. Altrimenti non avrei potuto spostare l'apk in/system/app – lukassteiner

Problemi correlati