Android系统模拟位置的使⽤⽅法
本⽂为⼤家分享了Android模拟位置的使⽤⽅法,⽀持Android6.0,供⼤家参考,具体内容如下
1、开启系统设置中的模拟位置
Android 6.0 以下:【开发者选项 -> 允许模拟位置】
Android 6.0 及以上:【开发者选项 -> 选择模拟位置信息应⽤】
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
2、判断是否开启了系统模拟位置
Android 6.0 以下:使⽤Settings.Secure.ALLOW_MOCK_LOCATION判断。
// Android 6.0 以下:是否开启【允许模拟位置】
boolean canMockPosition = Int(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0
Android 6.0 及以上:没有【允许模拟位置】选项,同时弃⽤了Settings.Secure.ALLOW_MOCK_LOCATION,⽆法通过上⾯的⽅法判断。增加了【选择模拟位置信息应⽤】的⽅法,需要选择使⽤模拟位置的应⽤。但是不知道怎么获取当前选择的应⽤,因此通过是否能够成功执⾏addTestProvider⽅法来进⾏判断,如果没有选择当前的应⽤,则addTestProvider会抛出异常。
boolean hasAddTestProvider = false;
boolean canMockPosition = (Int(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0)
|| Build.VERSION.SDK_INT > 22;
if (canMockPosition && hasAddTestProvider == false) {
try {android软件
String providerStr = LocationManager.GPS_PROVIDER;
LocationProvider provider = Provider(providerStr);
if (provider != null) {
locationManager.addTestProvider(
, quiresNetwork()
, quiresSatellite()
, quiresCell()
, provider.hasMonetaryCost()
, provider.supportsAltitude()
, provider.supportsSpeed()
, provider.supportsBearing()
, PowerRequirement()
, Accuracy());
} else {
locationManager.addTestProvider(
providerStr
, true, true, false, false, true, true, true
,
Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);
}
locationManager.setTestProviderEnabled(providerStr, true);
locationManager.setTestProviderStatus(providerStr, LocationProvider.AVAILABLE, null, System.currentTimeMillis());
// 模拟位置可⽤
hasAddTestProvider = true;
canMockPosition = true;
} catch (SecurityException e) {
canMockPosition = false;
}
}
3、模拟位置
private class RunnableMockLocation implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(INTERVEL);
if (hasAddTestProvider() == false) {
continue;
}
try {
/
/ 模拟位置(addTestProvider成功的前提下)
String providerStr = LocationManager.GPS_PROVIDER;
Location mockLocation = new Location(providerStr);
mockLocation.setLatitude(22);  // 维度(度)
mockLocation.setLongitude(113); // 经度(度)
mockLocation.setAltitude(30);  // ⾼程(⽶)
mockLocation.setBearing(180);  // ⽅向(度)
mockLocation.setSpeed(10);  //速度(⽶/秒)
mockLocation.setAccuracy(0.1f);  // 精度(⽶)
mockLocation.setTime(new Date().getTime());  // 本地时间
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
}
locationManager.setTestProviderLocation(providerStr, mockLocation);
} catch (Exception e) {
// 防⽌⽤户在软件运⾏过程中关闭模拟位置或选择其他应⽤
stopMockLocation();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
4、停⽌模拟位置
/**
* 停⽌模拟位置,以免启⽤模拟数据后⽆法还原使⽤系统位置
* 若模拟位置未开启,则removeTestProvider将会抛出异常;
* 若已addTestProvider后,关闭模拟位置,未removeTestProvider将导致系统GPS⽆数据更新; */
public void stopMockLocation() {
if (hasAddTestProvider) {
try {
} catch (Exception ex) {
// 若未成功addTestProvider,或者系统模拟位置已关闭则必然会出错
}
hasAddTestProvider = false;
}
}
Android Studio Project
以上就是本⽂的全部内容,希望对⼤家学习Android软件编程有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。