传感器
# 包
from ascript.android.sensor import AccelerometerSensor
from ascript.android.sensor import GyroscopeSensor
from ascript.android.sensor import LightSensor
from ascript.android.sensor import ProximitySensor
from ascript.android.sensor import GpsSensor
读取设备传感器数据,包括加速度计、陀螺仪、光线、接近、GPS等.
AccelerometerSensor 加速度计
检测设备在 X、Y、Z 三个轴方向上的加速度(单位: m/s²).
监听加速度变化
- 函数
@AccelerometerSensor.on(delay=AccelerometerSensor.DELAY_NORMAL)
def callback(event):
pass
- 参数
| 参数 | 类型 | 必须 | 备注 |
|---|---|---|---|
| delay | int | 否 | 采样速率,默认 DELAY_NORMAL,见下表 |
采样速率
| 常量 | 备注 |
|---|---|
| DELAY_NORMAL | 正常速率,适合一般检测 |
| DELAY_UI | 适合界面交互 |
| DELAY_GAME | 适合游戏场景 |
| DELAY_FASTEST | 最快速率,耗电较高 |
- 回调参数 event
| 属性 | 类型 | 备注 |
|---|---|---|
| x | float | X轴加速度 (m/s²) |
| y | float | Y轴加速度 (m/s²) |
| z | float | Z轴加速度 (m/s²) |
- 示例
from ascript.android.sensor import AccelerometerSensor
import time
@AccelerometerSensor.on()
def on_accel(event):
print(f"加速度 X:{event.x:.2f} Y:{event.y:.2f} Z:{event.z:.2f}")
time.sleep(10)
AccelerometerSensor.stop()
检测摇一摇
from ascript.android.sensor import AccelerometerSensor
import math, time
@AccelerometerSensor.on()
def on_shake(event):
total = math.sqrt(event.x**2 + event.y**2 + event.z**2)
if total > 15:
print("检测到摇一摇!")
time.sleep(30)
AccelerometerSensor.stop()
停止监听
AccelerometerSensor.stop()
GyroscopeSensor 陀螺仪
检测设备绕 X、Y、Z 三个轴的旋转角速度(单位: rad/s).
监听陀螺仪变化
- 函数
@GyroscopeSensor.on(delay=GyroscopeSensor.DELAY_NORMAL)
def callback(event):
pass
- 回调参数 event
| 属性 | 类型 | 备注 |
|---|---|---|
| x | float | X轴角速度 (rad/s) |
| y | float | Y轴角速度 (rad/s) |
| z | float | Z轴角速度 (rad/s) |
- 示例
from ascript.android.sensor import GyroscopeSensor
import time
@GyroscopeSensor.on(delay=GyroscopeSensor.DELAY_GAME)
def on_gyro(event):
print(f"陀螺仪 X:{event.x:.4f} Y:{event.y:.4f} Z:{event.z:.4f}")
time.sleep(10)
GyroscopeSensor.stop()
停止监听
GyroscopeSensor.stop()
LightSensor 光线传感器
检测环境光线强度(单位: lux).
监听光线变化
- 函数
@LightSensor.on()
def callback(event):
pass
- 回调参数 event
| 属性 | 类型 | 备注 |
|---|---|---|
| value | float | 光线强度 (lux). 室内一般 100~500, 室外可达 10000+ |
- 示例
from ascript.android.sensor import LightSensor
import time
@LightSensor.on()
def on_light(event):
if event.value < 10:
print("环境很暗:", event.value, "lux")
elif event.value > 5000:
print("环境很亮:", event.value, "lux")
time.sleep(30)
LightSensor.stop()
停止监听
LightSensor.stop()
ProximitySensor 接近传感器
检测是否有物体接近设备屏幕(通常用于检测手机是否贴耳).
监听接近变化
- 函数
@ProximitySensor.on()
def callback(event):
pass
- 回调参数 event
| 属性 | 类型 | 备注 |
|---|---|---|
| value | float | 距离(cm). 通常 0 = 有物体接近, 5 = 远离 |
- 示例
from ascript.android.sensor import ProximitySensor
import time
@ProximitySensor.on()
def on_proximity(event):
if event.value == 0:
print("有物体接近屏幕")
else:
print("物体远离屏幕")
time.sleep(30)
ProximitySensor.stop()
停止监听
ProximitySensor.stop()
GpsSensor GPS定位
监听GPS位置变化,获取经纬度、海拔、速度等信息.
需提前开启权限
AS程序: 开发者 -> 定位 -> 权限申请
小程序: 关于 -> 定位 -> 权限申请
提示
如果您之前使用 ascript.android.location 模块,可以继续使用,两者不冲突. GpsSensor 提供了与其他传感器一致的装饰器风格 API.
监听GPS位置变化
- 函数
@GpsSensor.on(min_time=5000, min_distance=0)
def callback(event):
pass
- 参数
| 参数 | 类型 | 必须 | 备注 |
|---|---|---|---|
| min_time | int | 否 | 最小更新时间间隔,单位毫秒,默认5000 |
| min_distance | int | 否 | 最小更新距离,单位米,默认0 |
- 回调参数 event
| 属性 | 类型 | 备注 |
|---|---|---|
| latitude | float | 纬度 |
| longitude | float | 经度 |
| altitude | float | 海拔 (米) |
| accuracy | float | 精度 (米) |
| speed | float | 速度 (m/s) |
- 示例
from ascript.android.sensor import GpsSensor
import time
@GpsSensor.on(min_time=3000)
def on_gps(event):
print(f"纬度:{event.latitude} 经度:{event.longitude}")
print(f"海拔:{event.altitude}m 精度:{event.accuracy}m 速度:{event.speed}m/s")
time.sleep(60)
GpsSensor.stop()
停止监听
GpsSensor.stop()
完整示例
from ascript.android.sensor import AccelerometerSensor, LightSensor, ProximitySensor
import time
# 加速度计 - 检测摇一摇
@AccelerometerSensor.on()
def on_accel(event):
import math
total = math.sqrt(event.x**2 + event.y**2 + event.z**2)
if total > 15:
print("摇一摇!")
# 光线传感器 - 检测环境光
@LightSensor.on()
def on_light(event):
print(f"光线: {event.value} lux")
# 接近传感器 - 检测贴耳
@ProximitySensor.on()
def on_near(event):
if event.value == 0:
print("贴近屏幕")
# 保持脚本运行30秒
time.sleep(30)
# 停止所有传感器
AccelerometerSensor.stop()
LightSensor.stop()
ProximitySensor.stop()