uni-app怎么获取手机端的当前电量信息 uni-app调用系统底层电池状态【实战】

张开发
2026/4/5 1:47:41 15 分钟阅读

分享文章

uni-app怎么获取手机端的当前电量信息 uni-app调用系统底层电池状态【实战】
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助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章