文档章节

Android mock location

c
 chenming
发布于 2014/04/20 17:38
字数 555
阅读 2843
收藏 1

1. Mock Location 简介

借助 mock location, 在测试LBS应用时不必进行路测就可以生成位置数据。 总的来说,使用 mock location 有以下好处:

  • 可以生成特定的模拟数据而不必真的移动物理设备
  • 模拟数据同样来自 location service,可以测试到应用中位置相关的代码。另外,是从产品外部发送模拟数据,产品代码中不会编写一些在发布前必须删除或关闭的测试代码
  • 不必移动物理设备所以可以在模拟器上测试产品

Android 官方文档 中给出了详细的操作步骤。但文档中的实现是基于 Google Play services 的。 对于没有安装 Google Play services 的设备,文档中提供的方法是不可行。

2. Mock Location 实现

参考一些技术博客, 发现不基于 Google Play services 也可以很方便地实现 mock location。总结如下

首先要确保打开设备的 mock location 开关 (2.3上 设置 - 应用程序 - 开发 - 允许模拟位置, 4.0上 设置 - 开发 - 允许模拟位置)

在 AndroidManifest.xml 中需要声明以下这个不太常用的权限:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

此外还需要GPS权限 ACCESS_FINE_LOCATION

核心代码如下:

mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mLocationManager.addTestProvider(LocationManager.GPS_PROVIDER, false,
		false, false, false, true, true, true, 0, /* magic */5);
mLocationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER,
		true);

Location loc = Utils.createLocation(35 + i * unit, 117 + i
		* unit, 50.f);
loc.setTime(System.currentTimeMillis());
mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, loc);

Utils类定义如下:

public class Utils {
    private static final String PROVIDER = "gps";
    private static final double LAT = 37.377166;
    private static final double LNG = -122.086966;
    private static final float ACCURACY = 3.0f;
    /*
     * From input arguments, create a single Location with provider set to
     * "flp"
     */
    public static Location createLocation(double lat, double lng, float accuracy) {
        // Create a new Location
        Location newLocation = new Location(PROVIDER);
        newLocation.setLatitude(lat);
        newLocation.setLongitude(lng);
        newLocation.setAccuracy(accuracy);
        return newLocation;
    }
    // Example of creating a new Location from test data
    public static final Location testLocation = createLocation(LAT, LNG, ACCURACY);
}

3. Mock Location 实现

Android 官方文档 中给出的最佳实践如下:

  • 从一个独立的 mock location provider app 中发送模拟数据
  • mock location provider app 是从运行在 started service 中的后台线程发送数据的。所以即使 app 进入后台,仍然可以发送模拟数据,且不用担心阻塞 UI 线程。

参考

android mock location on device

© 著作权归作者所有

共有 人打赏支持
c
粉丝 2
博文 59
码字总数 24719
作品 0
南宁
私信 提问
Android获取手机经纬度

利用手机获取所在地点的经纬度: Location 在Android 开发中还是经常用到的,比如 通过经纬度获取天气,根据Location 获取所在地区详细Address (比如Google Map 开发).等。而在Android 中通过...

长平狐
2012/09/03
11.7K
2
Google Play和基于功能的过滤(四)

软件功能参考 下表中列出了由当前大多数发布的发布的Android平台所支持的软件功能描述符。对于应用程序要使用或需要的单一功能,都要在应用程序的清单的元素中使用android:name属性来进行声明...

长平狐
2012/10/16
80
0
Android基础学习访问权限设置

作为android开发初学者,除了需要掌握android基础知识外,android开发中访问权限的设置也应熟悉,具体如下: 若应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: 同样的...

maiziedu
2015/01/23
304
0
Android开发_android权限

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangty0223/article/details/9389879 访问登记属性 android.permission.ACCESSCHECKINPROPERTIES ,读取或写...

张腾元_Ternence
2013/07/20
0
0
Android 操作权限大全 (android.permission)

android.permission.ACCESSCHECKINPROPERTIES 允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write accessto the “properties” table in the checkin d......

Vincent009
2012/10/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
32分钟前
2
0
Docker搭建代码质量检测平台-SonarQube(中文版)

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言...

Jacktanger
39分钟前
2
0
Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1、设置系统代理(Windows、Linux、MacOS) 2、设置代理插件(Chrome、Chromium、Firefox、Opera、QQ等浏览器) 3、...

sunboy2050
昨天
4
0
自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
昨天
3
0
徒手写一个es6代码库

mkdir democd demonpm initnpm install -g babelnpm install -g babel-clinpm install --save-dev babel-preset-es2015-node5 在项目目录创建两个文件夹 functional-playground ......

lilugirl
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部