Skip to main content

定位

需提前开启权限

AS程序: 开发者 -> 定位 -> 权限申请

小程序: 关于 -> 定位 -> 权限申请

# 包
from ascript.android import location

获取GPS位置信息

监听GPS位置刷新

  • 函数
location.request(call_back,min_time_updata=5000, min_distance_change=0)
  • 参数
参数类型必须备注
call_backfun python函数,带一个形参如果GPS位置刷新了,会回调该函数,并传入一个android.location.Location,通过该类,我们就可以获取到经纬度等信息.
min_time_updataintGPS变化,最小更新时间,单位毫秒,默认5000毫秒.
min_distance_changeintGPS最小变化距离,单位米, 默认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 作为“模拟位置信息应用”。

使用前准备
  1. 打开开发者选项。
  2. 找到“选择模拟位置信息应用”。
  3. 选择 AScript。

如果没有选择 AScript, 调用模拟定位 API 会返回失败信息, 或系统不会采用脚本设置的位置。

百度坐标采集

可以使用百度地图坐标拾取工具采集坐标:

https://lbsyun.baidu.com/maptool/getpoint

百度工具采集到的是 BD-09 坐标。location.mock.start() 默认 coord_type="bd09", 会在内部自动转换为 Android 系统使用的 WGS84 坐标。

查看模拟定位状态

  • 函数
location.mock.status()
  • 返回值

返回 dict

字段类型备注
okbool本次状态读取是否成功。
errorstr错误信息。成功时通常为空字符串。
selectedbool当前 AScript 是否已被系统选为“模拟位置信息应用”。如果为 False, 需要先到开发者选项里选择 AScript。
runningbool是否正在持续上报模拟定位。调用 location.mock.start() 成功后通常为 True; 调用 location.mock.stop() 后为 False
packagestr当前应用包名。
latfloat当前写入系统的纬度, 坐标系为 WGS84。
lonfloat当前写入系统的经度, 坐标系为 WGS84。
accuracyfloat当前定位精度, 单位米。
interval_msint持续上报间隔, 单位毫秒。
updated_atint最近一次写入系统定位的时间戳, 单位毫秒。
providersstr当前写入的 provider, 通常为 gps,network
hintstr操作提示。未选择模拟位置信息应用时会返回提示。
  • 返回示例
{
"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())

启动持续模拟定位

  • 函数
location.mock.start(lon, lat, accuracy=5.0, interval=1000, coord_type="bd09")
  • 参数
参数类型必须备注
lonfloat经度。默认按百度 BD-09 坐标接收。
latfloat纬度。默认按百度 BD-09 坐标接收。
accuracyfloat定位精度, 单位米, 默认 5.0。
intervalint持续上报间隔, 单位毫秒, 默认 1000。
coord_typestr输入坐标系, 支持 bd09gcj02wgs84, 默认 bd09
  • 返回值

返回 dict, 包含是否成功、当前系统写入坐标、精度、状态等信息。

  • 示例
from ascript.android import location
import time

# 百度坐标拾取工具采集到的坐标, 默认 coord_type="bd09"
print(location.mock.start(118.802422, 32.064652))

# 保持脚本运行, 持续上报模拟定位
time.sleep(300)

多次调用 location.mock.start() 会覆盖上一次坐标, 并重启持续上报任务。

停止模拟定位

  • 函数
location.mock.stop()

stop() 会停止持续上报, 并移除 GPS / network 测试 provider。

from ascript.android import location

print(location.mock.stop())
自动释放

如果脚本结束时忘记调用 location.mock.stop(), AScript 会在小程序停止、:py 服务断开时自动释放模拟定位。