Android系统模拟位置的使用方法

Android系统模拟位置的使用方法,第1张

概述本文为大家分享了Android模拟位置使用方法,支持Android6.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(),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,false,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系统模拟位置的使用方法全部内容,希望文章能够帮你解决Android系统模拟位置的使用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1149260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存