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; } } }
|