更新记录
1.0.0(2026-08-14) 下载此版本
获取Android系统环境光照值(Lux)- plus.android零插件方案
平台兼容性
uni-app(3.8.2)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | 5.0 | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-light-sensor(零插件方案)
通过
plus.androidNative.js 直接调用 Android SensorManager,获取环境光照值(Lux) 标准基座即可运行,无需编写 Java、无需自定义基座、无需原生插件
原理
uni-app 的 5+ Runtime 提供了 Native.js 能力(plus.android),允许在 JS 中直接调用 Android 原生 Java 类。
本方案通过 plus.android.importClass 导入 SensorManager、Sensor、SensorEventListener 等类,
用 plus.android.implements 实现传感器监听接口,完全在 JS 层完成,零原生代码。
考虑到部分 Android 调试基座下 SensorEvent 的公有字段映射不稳定,当前实现还补充了 plus.android.getAttribute 的兼容读取逻辑,用于稳定获取 values、accuracy、timestamp。
文件结构(HBuilderX 标准模板)
uni-light-sensor/
├── pages/
│ ├── index/
│ │ └── index.vue # 首页(入口导航)
│ └── light-sensor/
│ └── light-sensor.vue # 光照检测页面
├── utils/
│ └── light-sensor.js # 核心封装(零插件,纯 JS 调用原生)
├── App.vue # 应用入口
├── main.js # 主入口(兼容 Vue2/Vue3)
├── manifest.json # 应用配置
├── pages.json # 页面路由配置
└── README.md
快速使用
1. 引入
import LightSensor from '@/utils/light-sensor.js';
2. 检测传感器是否可用
const available = LightSensor.isAvailable();
console.log('光照传感器:', available ? '可用' : '不可用');
3. 实时监听光照变化
LightSensor.startListening((data) => {
console.log('光照度:', data.lux, 'Lux');
console.log('精度:', data.accuracy);
console.log('时间戳:', data.timestamp);
}, {
samplingPeriodUs: 200000 // 采样间隔,单位微秒,默认 200ms
});
4. 停止监听
LightSensor.stopListening();
5. 单次获取
try {
const data = await LightSensor.getLightLevel();
console.log('当前光照度:', data.lux, 'Lux');
} catch (e) {
console.error('单次获取失败:', e.message);
}
API 参考
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
isAvailable() |
无 | boolean |
检测是否有光照传感器 |
startListening(callback, options?) |
callback: 数据回调 options.samplingPeriodUs: 采样间隔 |
void |
开始实时监听 |
stopListening() |
无 | void |
停止监听,释放资源 |
getLightLevel() |
无 | Promise<{lux, accuracy, timestamp}> |
单次获取光照值,3 秒超时会 reject |
采样间隔参考
| Android 常量 | 值(微秒) | 说明 |
|---|---|---|
| SENSOR_DELAY_FASTEST | 0 | 最快,适合游戏 |
| SENSOR_DELAY_GAME | 20000 | 20ms |
| SENSOR_DELAY_UI | 200000 | 200ms,UI 交互(默认) |
| SENSOR_DELAY_NORMAL | 200000 | 普通速率 |
回调数据结构
{
lux: number, // 光照度(单位 Lux)
accuracy: number, // 精度等级:0=不可靠, 1=低, 2=中, 3=高
timestamp: number // 传感器事件时间戳(纳秒)
}
Lux 参考值
| Lux 范围 | 环境 |
|---|---|
| < 10 | 极暗 - 夜间室内 |
| 10 ~ 50 | 昏暗 - 弱光环境 |
| 50 ~ 200 | 适中 - 普通室内 |
| 200 ~ 500 | 明亮 - 办公室照明 |
| 500 ~ 1000 | 很亮 - 阴天室外 |
| 1000 ~ 10000 | 强烈 - 晴天室外 |
| > 10000 | 极强 - 直射阳光 |
注意事项
- 仅支持 Android:iOS 不开放环境光传感器 API
- 标准基座可用:无需自定义基座,直接运行调试
- 非 App 平台默认不可用:页面层会直接提示“当前设备无光照传感器或非 Android 环境”,并禁用监听与单次获取按钮
- 条件编译:代码中使用了
#ifdef APP-PLUS条件编译,H5/小程序端不会执行原生调用 - 页面卸载清理:务必在
onUnload中调用stopListening()释放传感器资源 - 单次获取超时:
getLightLevel()在 3 秒内未收到传感器回调时会抛出获取光照值超时 - 权限:光照传感器属于普通传感器,Android 6.0+ 无需动态申请权限
dcloud 上架说明
- 本方案不引入任何原生插件,不影响上架审核
- 无需在
manifest.json中声明额外权限(光照传感器非敏感权限) - 仅 Android 可用,iOS 端需做兼容处理(代码已内置条件编译)

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 5
赞赏 0
下载 12514208
赞赏 1943
赞赏
京公网安备:11010802035340号