本文为大家分享了Android模拟位置的使用方法,支持Android6.0,供大家参考,具体内容如下

1、开启系统设置中的模拟位置

Android 6.0 以下:【开发者选项 -> 允许模拟位置】

Android 6.0 及以上:【开发者选项 -> 选择模拟位置信息应用】

AndroidManifest.xml

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软件编程有所帮助。

更多相关文章

  1. cocos2d-x环境配置
  2. Android(安卓)SDK下载安装及配置教程
  3. Android(安卓)Device Monitor使用
  4. Dialog与DialogFragment设置大小位置的区别
  5. Android(安卓)ButterKnife Zelezny插件的安装与使用
  6. 1.Android(安卓)Studio 环境搭建并配置Genymotion
  7. 反射类查看类下面的所有方法及变量
  8. Android(安卓)高德地图,显示地图,并定位当前的位置
  9. android sdk和ndk开发环境搭建

随机推荐

  1. 【工作记录】android手势事件操作记录
  2. RecyclerView的简单使用
  3. 实用Android studio gradle的离线安装方
  4. Android Chronometer控件开发
  5. Android项目结构
  6. android开发视频资源 电驴10G下载
  7. android 动态注册 广播
  8. 菜单 Android Menu
  9. android之activity全面解析
  10. Android遇到的问题解决方法