天天看點

java程式設計手機gps定位_java – 如何設定Android模拟GPS位置?

描述

我在嘗試使用android模拟位置時遇到了問題,我的主要目标是将Android GPS設定為認為我們處于不同的位置,AKA假GPS.

目前的嘗試

我目前嘗試了兩種不同的類似解決方案,可以在這兩個網站上找到:

這兩個教程都是從2012年開始的,我不知道它們是否已經過時,或者我很難實作它們.

編碼開發

首先,我確定我有權限:

> ACCESS_COARSE_LOCATION

> ACCESS_FINE_LOCATION

> ACCESS_MOCK_LOCATION *

注意:1和2都被檢查,如果它們不可用我請求使用requestPermissions函數的權限.第三個是不可用的,事實上它隻能通過AndroidManifest.xml在調試模式下添加.

我還確定在“設定”中選擇了我的APP>開發人員選項>允許模拟地點.

畢竟,我已經嘗試通過OnCreate方法或OnClick按鈕調用此函數:

public void mockLocation(){

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

Criteria criteria = new Criteria();

criteria.setAccuracy( Criteria.ACCURACY_FINE );

String mocLocationProvider = lm.getBestProvider( criteria, true );

if ( mocLocationProvider == null ) {

Toast.makeText(getApplicationContext(), "No location provider found!", Toast.LENGTH_SHORT).show();

return;

}

lm.addTestProvider(mocLocationProvider, false, false,

false, false, true, true, true, 0, 5);

lm.setTestProviderEnabled(mocLocationProvider, true);

Location loc = new Location(mocLocationProvider);

Location mockLocation = new Location(mocLocationProvider); // a string

mockLocation.setLatitude(-26.902038); // double

mockLocation.setLongitude(-48.671337);

mockLocation.setAltitude(loc.getAltitude());

mockLocation.setTime(System.currentTimeMillis());

lm.setTestProviderLocation( mocLocationProvider, mockLocation);

Toast.makeText(getApplicationContext(), "Working", Toast.LENGTH_SHORT).show();

}

如果我以這種方式編譯和測試,我将收到Toast:“找不到位置提供者!”.但是,如果我将mocLocationProvider更改為:

String mocLocationProvider = LocationManager.NETWORK_PROVIDER;

我得到了APP崩潰,在LogCat中它說在此行中崩潰了:

lm.setTestProviderLocation(mocLocationProvider, mockLocation);

是以我目前沒有選擇,也不知道如何推進.

解決方法:

你必須設定

第一:

allow mock location in setting

第二集權限:

ACCESS_COARSE_LOCATION

ACCESS_FINE_LOCATION

ACCESS_MOCK_LOCATION

第三種使用這種方法:

setMock(some_lat,some_lon,some accuracy);

private void setMock(double latitude, double longitude, float accuracy) {

locMgr.addTestProvider (LocationManager.GPS_PROVIDER,

"requiresNetwork" == "",

"requiresSatellite" == "",

"requiresCell" == "",

"hasMonetaryCost" == "",

"supportsAltitude" == "",

"supportsSpeed" == "",

"supportsBearing" == "",

android.location.Criteria.POWER_LOW,

android.location.Criteria.ACCURACY_FINE);

Location newLocation = new Location(LocationManager.GPS_PROVIDER);

newLocation.setLatitude(latitude);

newLocation.setLongitude(longitude);

newLocation.setAccuracy(accuracy);

newLocation.setAltitude(0);

newLocation.setAccuracy(500);

newLocation.setTime(System.currentTimeMillis());

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());

}

locMgr.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);

locMgr.setTestProviderStatus(LocationManager.GPS_PROVIDER,

LocationProvider.AVAILABLE,

null,System.currentTimeMillis());

locMgr.setTestProviderLocation(LocationManager.GPS_PROVIDER, newLocation);}

标簽:java,android,android-studio,gps

來源: https://codeday.me/bug/20190527/1166338.html