|
|
发表于 2026-7-25 18:42:15
来自手机
|
显示全部楼层
本帖最后由 jadegu 于 2026-7-25 18:45 编辑
AI写的。用QPYTHON实现了。
会震动,音量最高了,没声音好像
# -*- coding: utf-8 -*-
import androidhelper
import time
import os
def get_battery_level(droid):
"""智能获取电量:先找系统文件,找不到再用API"""
# 方法1:遍历系统底层文件查找电量(最准确)
try:
base_path = '/sys/class/power_supply'
if os.path.exists(base_path):
# 遍历 power_supply 下的所有设备(如 battery, bms, usb 等)
for device in os.listdir(base_path):
device_path = os.path.join(base_path, device)
capacity_file = os.path.join(device_path, 'capacity')
# 如果找到 capacity 文件,直接读取
if os.path.isfile(capacity_file):
with open(capacity_file, 'r') as f:
level = int(f.read().strip())
# 过滤掉不合理的数值(有些设备会返回0或负数)
if 0 < level <= 100:
return level
except Exception as e:
pass # 文件读取失败,继续尝试方法2
# 方法2:使用 QPython API (修复了之前返回None的bug)
try:
droid.batteryStartMonitoring()
time.sleep(0.5) # 给系统一点点时间刷新数据
# 尝试读取完整电池数据字典
data = droid.readBatteryData().result
if data and isinstance(data, dict) and 'level' in data:
return int(data['level'])
# 备用:直接获取level
level = droid.batteryGetLevel().result
if level is not None:
return int(float(level))
except Exception as e:
pass
return -1 # 如果两种方法都失败,返回 -1
def main():
droid = androidhelper.Android()
print("=" * 40)
print("电池监控系统启动 (智能兼容模式)")
print("检测间隔: 20秒 | 报警阈值: 5%")
print("=" * 40)
alarm_triggered = False
try:
while True:
# 获取电量
level = get_battery_level(droid)
if level != -1:
print(f"[{time.strftime('%H:%M:%S')}] 当前电量: {level}%")
# 低电量报警逻辑
if level < 5:
if not alarm_triggered:
print("⚠️ 电量过低!触发最大音量报警!")
# 获取最大音量并设置
try:
max_vol = droid.getMaxMediaVolume().result
if max_vol is not None:
droid.setMediaVolume(int(max_vol))
except Exception as e:
print(f"设置音量失败: {e}")
# 语音和振动报警
droid.ttsSpeak(f"警告,电量仅剩{level}%,请立即充电")
droid.vibrate(2000) # 振动2秒
alarm_triggered = True
else:
# 电量回升,重置报警状态
if alarm_triggered:
print("电量已恢复,解除报警状态。")
alarm_triggered = False
else:
print("无法获取电量数据,请检查权限或系统兼容性...")
# 等待20秒
time.sleep(20)
except KeyboardInterrupt:
print("\n监控已手动停止")
if __name__ == "__main__":
main() |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|