Android模拟定位

Android模拟定位

编写环境

Android Studio,Android 6.0以上

添加权限

AndroidManifest.xml

1
2
3
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

添加模拟定位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
_location_manager = (LocationManager)getSystemService(LOCATION_SERVICE);
List<String> providers = _location_manager.getAllProviders();
for (String providerstr : providers) {
if (providerstr.equals("passive"))
continue;
_provider_string.add(providerstr);
Log.d(this.getClass().getName(), providerstr);
LocationProvider provider = _location_manager.getProvider(providerstr);
_location_manager.addTestProvider(provider.getName(),
provider.hasMonetaryCost(),
provider.supportsAltitude(),
provider.supportsSpeed(),
provider.supportsBearing(),
provider.getPowerRequirement(),
provider.getAccuracy());
_location_manager.setTestProviderEnabled(providerstr, true);
_location_manager.setTestProviderStatus(providerstr, LocationProvider.AVAILABLE, null, System.currentTimeMillis());
}

passive为被动获取不能模拟

模拟定位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
_location_manager = (LocationManager)getSystemService(LOCATION_SERVICE);
List<String> providers = _location_manager.getAllProviders();
while(true) {
for (String providerstr : providers) {
if (providerstr.equals("passive"))
continue;
Location mockloc = new Location(providerstr);
// 经度
mockloc.setLongitude(88);
// 纬度
mockloc.setLatitude(88);
// 高度
mockloc.setAltitude(0);
mockloc.setBearing(180);
mockloc.setSpeed(0);
mockloc.setAccuracy(3.0f);
mockloc.setTime(System.currentTimeMillis());
mockloc.setElapsedRealtimeNanos(SystemClock.elapsedRealtime());
try {
_location_manager.setTestProviderLocation(providerstr, mockloc);
}catch (IllegalArgumentException e){
Log.e(MockLocationService.class.getName(), "Set Provider Error");
break;
}
}
}