uni-app怎么获取手机端的当前电量信息 uni-app调用系统底层电池状态【实战】
Vue2项目中uni.getBatteryInfo不可用,需通过plus.android/plus.ios调原生:Android监听ACTION_BATTERY_CHANGED广播并计算百分比,iOS需先启用监控并处理归一化值,H5和小程序需分别兼容。Vue2 项目直接调用会静默失败,控制台无报错,success 回调不触发,fail 也不走——这是最坑的地方。真正能落地的方案,是绕过 uni 封
Vue2项目中uni.getBatteryInfo不可用,需通过plus.android/plus.ios调原生:Android监听ACTION_BATTERY_CHANGED广播并计算百分比,iOS需先启用监控并处理归一化值,H5和小程序需分别兼容。uni.getBatteryInfo 在 Vue2 项目里根本不能用官方 API uni.getBatteryInfo 确实存在,但截至 2026 年 3 月,它仍依赖插件且仅支持 Vue3。Vue2 项目直接调用会静默失败,控制台无报错,success 回调不触发,fail 也不走——这是最坑的地方。真正能落地的方案,是绕过 uni 封装,用 plus.android 和 plus.ios 直接调原生。但必须注意:这不是“多写几行就能跑”,而是平台逻辑完全不同,不能共用一套代码。Android 需要读取广播 Intent.ACTION_BATTERY_CHANGED,靠 getIntExtra("level", -1) 和 getIntExtra("scale", -1) 计算百分比iOS 必须先开启监控:dev.setBatteryMonitoringEnabled(true),否则 dev.batteryLevel() 永远返回 -1Android 还得提前在 AndroidManifest.xml 加权限:android.permission.BATTERY_STATS(否则真机直接崩溃)Android 获取电量要自己注册 BroadcastReceiver别指望 plus.android.invoke(bm, "getIntProperty", BatteryManager.BATTERY_PROPERTY_CAPACITY) 能稳定工作——这个接口在 Android 10+ 上已被限制,很多机型返回 0 或抛异常。唯一可靠的方式是监听系统广播。关键点不是“怎么写 receiver”,而是“什么时候注册”和“要不要 unregister”:必须在 Activity 生命周期内注册,推荐在 onLoad 或 mounted 里用 main.registerReceiverIntentFilter 必须明确设为 Intent.ACTION_BATTERY_CHANGED,不能漏掉 new 实例不需要手动 unregister——因为 ACTION_BATTERY_CHANGED 是 sticky broadcast,注册即得最新值,且系统不回收电量计算务必用 Math.floor((level / scale) * 100),避免小数点后精度溢出(比如 94.9999999 → 94% 而非 95%)iOS 的 batteryLevel 返回的是 0.0 ~ 1.0 浮点数很多人拿到 dev.batteryLevel() 结果是 0.94,直接拼字符串显示 “0.94%”,这就错了。iOS 原生返回的是归一化值,必须乘以 100 再取整。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
更多推荐
所有评论(0)