定位
需提前开启权限
AS程序: 开发者 -> 定位 -> 权限申请
小程序: 关于 -> 定位 -> 权限申请
# 包
from ascript.android import location
获取GPS位置信息
监听GPS位置刷新
- 函数
location.request(call_back,min_time_updata=5000, min_distance_change=0)
- 参数
| 参数 | 类型 | 必须 | 备注 |
|---|---|---|---|
| call_back | fun python函数,带一个形参 | 是 | 如果GPS位置刷新了,会回调该函数,并传入一个android.location.Location,通过该类,我们就可以获取到经纬度等信息. |
| min_time_updata | int | 否 | GPS变化,最小更新时间,单位毫秒,默认5000毫秒. |
| min_distance_change | int | 否 | GPS最小变化距离,单位米, 默认0,不限距离变化 |
# 异步监听GSP信息,如果有GPS变化,回调该函数
from ascript.android import location
print("Hello AS!")
# 异步监听GSP信息,如果有GPS变化,回调该函数
def on_get(lo):
print("有新的gps信息",lo)
print("经度:",lo.getLatitude())
print("纬度:",lo.getLongitude())
location.request(on_get)
关闭GPS监听
- 函数
from ascript.android import location
location.close()
获取最后一次GPS位置
- 函数
location.get_last()
-
参数 无
-
返回值
android.location.Location,通过该类,我们就可以获取到经纬度等信息.
# 异步监听GSP信息,如果有GPS变化,回调该函数
from ascript.android import location
lo = location.get_last()
# 有可能获取不到,因此判断下是否为None~
if lo:
print("经度:",lo.getLatitude())
print("纬度:",lo.getLongitude())
location.request(on_get)
模拟定位
模拟定位用于把本机系统定位临时改成脚本设置的坐标。使用前需要先在 Android 开发者选项里选择 AScript 作为“模拟位置信息应用”。
使用前准备
- 打开开发者选项。
- 找到“选择模拟位置信息应用”。
- 选择 AScript。
如果没有选择 AScript, 调用模拟定位 API 会返回失败信息, 或系统不会采用脚本设置的位置。
百度坐标采集
可以使用百度地图坐标拾取工具采集坐标:
https://lbsyun.baidu.com/maptool/getpoint
百度工具采集到的是 BD-09 坐标。location.mock.start() 默认 coord_type="bd09", 会在内部自动转换为 Android 系统使用的 WGS84 坐标。
查看模拟定位状态
- 函数
location.mock.status()
- 返回值
返回 dict。
| 字段 | 类型 | 备注 |
|---|---|---|
| ok | bool | 本次状态读取是否成功。 |
| error | str | 错误信息。成功时通常为空字符串。 |
| selected | bool | 当前 AScript 是否已被系统选为“模拟位置信息应用”。如果为 False, 需要先到开发者选项里选择 AScript。 |
| running | bool | 是否正在持续上报模拟定位。调用 location.mock.start() 成功后通常为 True; 调用 location.mock.stop() 后为 False。 |
| package | str | 当前应用包名。 |
| lat | float | 当前写入系统的纬度, 坐标系为 WGS84。 |
| lon | float | 当前写入系统的经度, 坐标系为 WGS84。 |
| accuracy | float | 当前定位精度, 单位米。 |
| interval_ms | int | 持续上报间隔, 单位毫秒。 |
| updated_at | int | 最近一次写入系统定位的时间戳, 单位毫秒。 |
| providers | str | 当前写入的 provider, 通常为 gps,network。 |
| hint | str | 操作提示。未选择模拟位置信息应用时会返回提示。 |
- 返回示例
{
"ok": True,
"error": "",
"selected": True,
"running": True,
"package": "com.aojoy.airscript",
"lat": 32.06037329164692,
"lon": 118.79081508380428,
"accuracy": 5.0,
"interval_ms": 1000,
"updated_at": 1783414871763,
"providers": "gps,network"
}
- 示例
from ascript.android import location
print(location.mock.status())