修改云手机定位
功能介绍
影响手机定位功能的信息分为四类,分别为GPS经纬度数据、基站信息数据、WiFi信息及IP地址,云手机支持其中的GPS经纬度数据和WiFi信息模拟,用户可根据业务场景,选择其中一种或多种进行定位模拟。
定位模式 |
精度 |
常见场景 |
---|---|---|
GPS |
高 |
地图、导航等需要持续定位的应用软件 |
WiFi |
中 |
一般用于GPS和基站的辅助定位手段 |
前提条件
已购买并通过ADB方式登录云手机。详细操作请参见“购买云手机服务器”。
GPS经纬度数据模拟
- GPS经纬度获取
云手机GPS经纬度数据模拟基于WGS84坐标系,使用其它坐标系如GCJ02(高德、QQ地图) ,BD09(百度地图) 注入会产生偏差。
获取GPS定位信息示例:
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener); private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // location包含gps数据经纬度等信息 } };
- shell命令注入
在手机adb shell环境里执行echo "参数列表(参数之间用“:”分割)" > /data/gps/fifo。
参数说明如表1所示。
表1 GPS数据注入参数 参数
说明
是否必须
缺省值
约束
latitude
纬度。
北纬为正,南纬为负。
必须
22.657501
取值范围:-90.000000~90.000000
单位:度(°)
longitude
经度。
东经为正,西经为负。
必须
114.055939
取值范围:-180.000000~180.000000
单位:度(°)
altitude
海拔高度
可选
51.0
单位:米
speed
速度
可选
0.0
单位:米
bearing
方向角。
0°表示正北方向,90°表示正东方向,180°表示正南方向,270°表示正西方向。
可选
30.0
取值范围:0.0~360.0
单位:度(°)
accuracy
定位精度
可选
90.0
单位:米
举例:假设需修改的位置是东经114.055939度,北纬22.657501度。
adb -s 127.0.0.1:本地空闲端口 shell "echo 'longitude=114.055939:latitude=22.657501' > /data/gps/fifo"
- GPS数据持续注入(建议使用非阻塞注入方式)
使用自有或第三方SDK应用代码持续注入GPS数据,需使用O_NONBLOCK非阻塞方式注入。
举例:
#define GPSFifoName "/data/gps/fifo" if((fifo_fd = open(GPSFifoName, O_WRONLY | O_NONBLOCK)) < 0) { ALOGE("open fifo "%s" (write) fail, error = %s\n", GPSFifoName, strerror(errno)); return; } //注意cmd参数间需要通过冒号“:”进行分割 char* cmd = "longitude=113.370592:latitude=23.123642"; len = strlen(cmd); if(write(fifo_fd, cmd, len) != len) { ALOGE("%s: write "%s" to "%s" fail: %s", FUNCTION, cmd, GPSFifoName, strerror(errno)); }
WiFi信息模拟
- WiFi信息获取
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiConnection = wifiManager.getConnectionInfo(); if (wifiConnection != null) { String bssid = wifiConnection.getBSSID(); }
- WiFi信息注入
针对当前连接WiFi BSSID,可以通过设置属性com.cph.wifi.bssid进行注入。
举例:
setprop com.cph.wifi.bssid 02:00:00:00:00:00