文档章节

Android mock location

c
 chenming
发布于 2014/04/20 17:38
字数 555
阅读 2702
收藏 1
点赞 0
评论 0

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
博文 25
码字总数 24719
作品 0
南宁
iOS端Mock GPS定位 —— 测试、开发、玩游戏、发朋友圈等等,你都用得上

前言 2017年,淘宝、天猫线下活动会场日益增多,个性化的地理围栏圈人投放成了运营司空见惯的方式,那么每次测试就变得非常蛋疼。安卓能找到一大波能虚拟定位的工具,那ios如何测试。我们Awa...

尛破孩波波 ⋅ 2017/10/11 ⋅ 0

[工具安装使用] [Websocket] Wesocket Server测试用例

介绍: 利用okHttp中自带的mock web server在AndroidStudio测试WebSocketServer 注意: 1.只能在本机回环测试 2. 端口号每次都是随机变化,client端每次都需要更改端口号才可以使用。 build....

kris_fei ⋅ 05/11 ⋅ 0

Android获取手机经纬度

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

长平狐 ⋅ 2012/09/03 ⋅ 2

MTSC2018部分演讲嘉宾及主题曝光

MTSC2018部分Topic曝光啦 Google,阿里,百度,美团,小米,360,网易等公司是如何将技术转化为现实生产力,提高工作效率的? 离开Saucelab的Jonathan又是如何规划Appium未来5年的发展方向的...

qhshiniba ⋅ 04/23 ⋅ 0

Android版添加phonegap-百度地图插件教程

第一步:添加SDK包:【目前为最新的百度地图SDK】 在工程里新建libs文件夹,将开发包里所有文件拷贝到libs根目录下覆盖即可 第二步:SDK包引入项目中 在工程属性->Java Build Path->Librarie...

大街小巷 ⋅ 2015/12/21 ⋅ 0

Android (cocos2dx 网络访问)访问权限设置

Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: <uses-permission android:name="android.permission.INTERNET"></uses-permission> 同样......

石头哥哥 ⋅ 2013/08/14 ⋅ 0

Android基础学习访问权限设置

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

maiziedu ⋅ 2015/01/23 ⋅ 0

android:excludeFromRecents 属性需要注意的小地方

在 Android 系统中,如果我们不想某个 Activity 出现在 “Recent screes” 中,可以设置 属性 android:excludeFromRecents 为 true。其中有些需要注意到的地方说明下。 android:excludeFromR...

夏洛克的喵 ⋅ 06/12 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

VirtualApk启动插件Activity

插件以APK的形式保存在SD卡上,通过startActivity方式启动Activity需要首先将Activity注册到AndroidManifest.xml,如果没有注册就会出现如下错误。 要实现插件Activity的启动需要解决以下问题...

JasmineBen ⋅ 05/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Greys Java在线问题诊断工具

Greys是一个JVM进程执行过程中的异常诊断工具。 在不中断程序执行的情况下轻松完成JVM相关问题排查工作 目标群体 有时候突然一个问题反馈上来,需要入参才能完成定位,但恰恰没有任何日志。回...

素雷 ⋅ 26分钟前 ⋅ 0

git从远程仓库拉取代码的常用指令

一种(比较麻烦的)拉代码的方法 git clone //克隆代码库,与远程代码库的主干建立连接,如果主干已经在就不用再clone啦,克隆路径为当前路径下的新创建的文件夹 git checkout -b //本地建立...

Helios51 ⋅ 40分钟前 ⋅ 0

005. 深入JVM学习—Java堆内存参数调整

1. JVM整体内存调整图解(调优关键) 实际上每一块子内存区域都会存在一部分可变伸缩区域,其基本流程:如果内存空间不足,则在可变的范围之内扩大内存空间,当一段时间之后,内存空间不紧张...

影狼 ⋅ 45分钟前 ⋅ 0

内存障碍: 软件黑客的硬件视图

此文为笔者近日有幸看到的一则关于计算机底层内存障碍的学术论文,并翻译(机译)而来[自认为翻译的还行],若读者想要英文原版的论文话,给我留言,我发给你。 内存障碍: 软件黑客的硬件视图...

Romane ⋅ 今天 ⋅ 0

SpringCloud 微服务 (七) 服务通信 Feign

壹 继续第(六)篇RestTemplate篇 做到现在,本机上已经有注册中心: eureka, 服务:client、order、product 继续在order中实现通信向product服务,使用Feign方式 下面记录学习和遇到的问题 贰 or...

___大侠 ⋅ 今天 ⋅ 0

gitee、github上issue标签方案

目录 [TOC] issue生命周期 st=>start: 开始e=>end: 结束op0=>operation: 新建issueop1=>operation: 评审issueop2=>operation: 任务负责人执行任务cond1=>condition: 是否通过?op3=>o......

lovewinner ⋅ 今天 ⋅ 0

浅谈mysql的索引设计原则以及常见索引的区别

索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索...

屌丝男神 ⋅ 今天 ⋅ 0

String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 首先说运行速度,或者说是, 1.执行速度 在这方面运行速度快慢为:StringBuilder(线程不安全,可变) > StringBuffer...

时刻在奔跑 ⋅ 今天 ⋅ 0

java以太坊开发 - web3j使用钱包进行转账

首先载入钱包,然后利用账户凭证操作受控交易Transfer进行转账: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/Credentials credentials = Wallet......

以太坊教程 ⋅ 今天 ⋅ 0

Oracle全文检索配置与实践

Oracle全文检索配置与实践

微小宝 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部