安卓60如何关闭安卓6.0 允许模拟位置置设置?

本帖子已过去太久远了,不再提供回复功能。Android系统模拟位置的使用方法
作者:doris_d
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了Android系统模拟位置的使用方法,具有参考价值,感兴趣的小伙伴们可以参考一下
本文为大家分享了Android模拟位置的使用方法,支持Android6.0,供大家参考,具体内容如下
1、开启系统设置中的模拟位置
Android 6.0 以下:【开发者选项 -& 允许模拟位置】
Android 6.0 及以上:【开发者选项 -& 选择模拟位置信息应用】
AndroidManifest.xml
&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 = Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0
Android 6.0 及以上:没有【允许模拟位置】选项,同时弃用了Settings.Secure.ALLOW_MOCK_LOCATION,无法通过上面的方法判断。增加了【选择模拟位置信息应用】的方法,需要选择使用模拟位置的应用。但是不知道怎么获取当前选择的应用,因此通过是否能够成功执行addTestProvider方法来进行判断,如果没有选择当前的应用,则addTestProvider会抛出异常。
boolean hasAddTestProvider =
boolean canMockPosition = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0)
|| Build.VERSION.SDK_INT & 22;
if (canMockPosition && hasAddTestProvider == false) {
String providerStr = LocationManager.GPS_PROVIDER;
LocationProvider provider = locationManager.getProvider(providerStr);
if (provider != null) {
locationManager.addTestProvider(
provider.getName()
, provider.requiresNetwork()
, provider.requiresSatellite()
, provider.requiresCell()
, provider.hasMonetaryCost()
, provider.supportsAltitude()
, provider.supportsSpeed()
, provider.supportsBearing()
, provider.getPowerRequirement()
, provider.getAccuracy());
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 =
canMockPosition =
} catch (SecurityException e) {
canMockPosition =
3、模拟位置
private class RunnableMockLocation implements Runnable {
public void run() {
while (true) {
Thread.sleep(INTERVEL);
if (hasAddTestProvider() == false) {
// 模拟位置(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) {
locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
// 若未成功addTestProvider,或者系统模拟位置已关闭则必然会出错
hasAddTestProvider =
Android Studio Project
以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具后使用快捷导航没有帐号?
只需一步,快速开始
查看: 13679|回复: 13
在线时间197 小时经验值464 最后登录注册时间帖子阅读权限60UID566063
大学本科, 积分 464, 距离下一级还需 236 积分
TA的每日心情慵懒 12:02签到天数: 1 天[LV.1]初来乍到
G币110 最后登录注册时间
马上注册,结交更多机友,下载更多应用,让你轻松玩转手机。
已有帐号?   下载游戏和软件,请【】进入机锋市场!
不知道怎么关闭了,有知道的吗?谢谢
找呀找!找到一个好朋友!
在线时间4 小时经验值3431 最后登录注册时间帖子阅读权限100UID
博士, 积分 3431, 距离下一级还需 69 积分
TA的每日心情怒 10:58签到天数: 617 天[LV.9]以坛为家II
G币1535 最后登录注册时间
开发者选项
在线时间197 小时经验值464 最后登录注册时间帖子阅读权限60UID566063
大学本科, 积分 464, 距离下一级还需 236 积分
TA的每日心情慵懒 12:02签到天数: 1 天[LV.1]初来乍到
G币110 最后登录注册时间
开发者里面我进去了,根本无法关闭,软件一直说是允许了,我晕。。。。求有知道怎么回事的不
找呀找!找到一个好朋友!
在线时间544 小时经验值496 最后登录注册时间帖子阅读权限60UID717317
大学本科, 积分 496, 距离下一级还需 204 积分
TA的每日心情难过 20:50签到天数: 2 天[LV.1]初来乍到
G币2 最后登录注册时间
安卓6.0就是开启的,暂时无法关闭。滴滴司机端一直用不了。。。。。
在线时间197 小时经验值464 最后登录注册时间帖子阅读权限60UID566063
大学本科, 积分 464, 距离下一级还需 236 积分
TA的每日心情慵懒 12:02签到天数: 1 天[LV.1]初来乍到
G币110 最后登录注册时间
liyilihan 发表于
安卓6.0就是开启的,暂时无法关闭。滴滴司机端一直用不了。。。。。
问题是从一开始还能用,后面就插了一下汽车的车载就变成开启了,肯定是有地方可以关闭的!不知道有没人遇到这个问题!
找呀找!找到一个好朋友!
在线时间197 小时经验值464 最后登录注册时间帖子阅读权限60UID566063
大学本科, 积分 464, 距离下一级还需 236 积分
TA的每日心情慵懒 12:02签到天数: 1 天[LV.1]初来乍到
G币110 最后登录注册时间
哎!!!!!!!没人知道怎么解决?
找呀找!找到一个好朋友!
在线时间0 小时经验值66 最后登录注册时间帖子阅读权限30UID
初中生, 积分 66, 距离下一级还需 34 积分
TA的每日心情开心 18:24签到天数: 17 天[LV.4]偶尔看看III
G币30 最后登录注册时间
放到knox里面就可以了
在线时间1 小时经验值43 最后登录注册时间帖子阅读权限20UID
小学生, 积分 43, 距离下一级还需 7 积分
该用户从未签到
G币2 最后登录注册时间
我也是这个情况,求解脱啊?
在线时间0 小时经验值1 最后登录注册时间帖子阅读权限10UID
幼儿园, 积分 1, 距离下一级还需 14 积分
该用户从未签到
G币0 最后登录注册时间
qinlu806 发表于
问题是从一开始还能用,后面就插了一下汽车的车载就变成开启了,肯定是有地方可以关闭的!不知道有没人遇 ...
今天也遇到这个问题了,以前更新6.0一直用滴滴没出现过,下午无聊做了两件事第一更新了滴滴,第二打开过车载模式。看楼主说也开过车载所以觉得问题是车载模式打开了模拟定位,后来禁用车载也不行,重做系统已更新车载模式直接打不开滴滴,最后只能选择双清重做系统,然后软件更新的时候不更新车载模式,可以用现在。一更新车载就挂,话说刚升级6.0的时候也更新过车载就没出现这种情况,不过那会更新车载从来没打开过。
在线时间4 小时经验值1703 最后登录注册时间帖子阅读权限90UID
硕士, 积分 1703, 距离下一级还需 797 积分
TA的每日心情难过 19:16签到天数: 274 天[LV.8]以坛为家I
G币1131 最后登录注册时间
很简单的啊
Powered by在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
问题描述:
应用中开启了模拟位置,当应用关闭或者在应用中手动关闭模拟位置后,手机的GPS无法启动,必须重启手机才能恢复正常。
代码详情:LocationManager的初始设置(应用本身也需要开启GPS)
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
locationManager.addGpsStatusListener(gpsStatusListener);
locationManager.addNmeaListener(nmeaListener);
开启模拟位置,覆盖掉GPS时的代码如下(通过点击事件开启的):
mMockProviderName = LocationManager.GPS_PROVIDER;
locationManager.setTestProviderEnabled(mMockProviderName, true);
locationManager.requestLocationUpdates(mMockProviderName, 1000, 0, locationListener);
点击关闭模拟位置时的代码如下:
locationManager.setTestProviderEnabled(mMockProviderName, false);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
locationManager.removeTestProvider(mMockProviderName);
程序退出时关闭模拟位置的代码如下
locationManager.setTestProviderEnabled(mMockProviderName, false);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
locationManager.removeTestProvider(mMockProviderName);
locationManager.removeUpdates(locationListener); locationManager.removeGpsStatusListener(gpsStatusListener);
locationManager.removeNmeaListener(nmeaListener);
基本上都是按照官方文档来的,该现象在google上搜索了一番,并没有发现类似问题的解决办法。想请教一下各位出现如问题所述的现象是什么原因,如何修改。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:安卓手机模拟地点方法_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
安卓手机模拟地点方法
&&安卓手机模拟地点方法
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 android 允许模拟位置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信