Android mock location
2014-04-20 17:38
489 查看
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
相关文章推荐
- (转)android mock location
- Android中的ACCESS_MOCK_LOCATION权限使用Demo
- android mock location
- android mock location
- Android studio 添加 android.permission.ACCESS_MOCK_LOCATION 权限无法打包
- android mock location
- Android中的ACCESS_MOCK_LOCATION权限使用Demo
- Android环境搭建——安装ADT时出现Duplicate Location错误
- Android 编程下 App Install Location
- [009] 百度地图API之MyLocationOverlay的使用(Android) .
- Android官方文档之Location and Sensors APIs(中)
- “Location of the Android SDK has not been set up in the preferences”问题的解决
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- Android location对象为空
- Import android项目或者新建Exsiting project时,出错提示 overlaps the location of another project
- location of the android sdk has not been setup in the preferences
- android 网络定位失败 location为null的真正原因
- (转)Android Location的使用!!
- Android高手进阶教程(十五)之---通过Location获取Address的使用!
- [原创]Android中LocationManager的简单使用,获取当前位置