Android系统模拟位置的使用方法
程序员文章站
2024-03-31 15:57:22
本文为大家分享了android模拟位置的使用方法,支持android6.0,供大家参考,具体内容如下
1、开启系统设置中的模拟位置
android 6.0 以下:【开发...
本文为大家分享了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 = false; boolean canmockposition = (settings.secure.getint(getcontentresolver(), settings.secure.allow_mock_location, 0) != 0) || build.version.sdk_int > 22; if (canmockposition && hasaddtestprovider == false) { try { 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()); } 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 { locationmanager.removetestprovider(locationmanager.gps_provider); } catch (exception ex) { // 若未成功addtestprovider,或者系统模拟位置已关闭则必然会出错 } hasaddtestprovider = false; } }
android studio project
以上就是本文的全部内容,希望对大家学习android软件编程有所帮助。
推荐阅读
-
详解Android中AsyncTask的使用方法
-
Android系统模拟位置的使用方法
-
Android系统中使用shareuserid获取系统权限的教程
-
Android模拟器接收UDP数据包的若干问题分析
-
Android判断手机是否是小米MIUI系统的方法
-
Android基础控件(EditView、SeekBar等)的使用方法
-
ios模拟安卓系统(iphone虚拟运行安卓系统使用方法)
-
ios模拟安卓系统(iphone虚拟运行安卓系统使用方法)
-
Android 当一个View 平移后,使他原来的位置可用。
-
【android应用】android应用开发中,package相关信息的判断和获取--系统权限、版本号、包名等