我看到,在市場上有很多模擬位置應用程序適用於整個系統。 (這意味着當我們使用谷歌地圖,超級...)它會顯示新的位置。如何寫模擬GPS提供商影響整個系統應用程序
我跟着一些教程。這裏是我的示例代碼:
public class MainActivity extends AppCompatActivity {
LocationManager mLocationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
setupMockLocations(LocationManager.GPS_PROVIDER);
setupMockLocations(LocationManager.NETWORK_PROVIDER);
setupMockLocations(LocationManager.PASSIVE_PROVIDER);
}
private void setupMockLocations(final String providerName) {
new Thread(new Runnable() {
@Override
public void run() {
for (; ;) {
mLocationManager.addTestProvider(providerName, false, //requiresNetwork,
false, // requiresSatellite,
false, // requiresCell,
false, // hasMonetaryCost,
false, // supportsAltitude,
false, // supportsSpeed, s
false, // upportsBearing,
Criteria.POWER_LOW, // powerRequirement
Criteria.ACCURACY_FINE); // accuracy
mLocationManager.setTestProviderEnabled(providerName, true);
location.setTime(System.currentTimeMillis());
location.setAccuracy(1);
location.setTime(System.currentTimeMillis());
Method locationJellyBeanFixMethod = null;
try {
locationJellyBeanFixMethod = Location.class.getMethod("makeComplete");
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
if (locationJellyBeanFixMethod != null) {
try {
locationJellyBeanFixMethod.invoke(location);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
mLocationManager.setTestProviderLocation(providerName, location);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e("print", "mocking " + providerName);
}
}
}).run();
}
}
但看起來像這樣的代碼不起作用。 (它應該在Google地圖上顯示我的sampleLocation
而不是當前位置)。我也僞造GPS_PROVIDER
NETWORK_PROVIDER
和PASSIVE_PROVIDER
。請告訴我如何做到這一點。
我改變了我的代碼。我定期調用'setupMockLocation',但它仍然不起作用。也許還有其他錯誤? –
當你離開你的應用程序時發生了什麼?您應該在服務中運行相關代碼,因爲在切換到Google地圖(或其他任何地方)後,您的活動(和模擬位置)將停止,然後Google地圖會收到新的位置信息。 – Blackkara
當我離開我的應用程序時,線程仍定期運行模擬位置(我已通過打印日誌進行檢查)。 –