如何在Flutter中获取当前设备的温湿度数值
Flutter设备温湿度读数追踪实现方案及相关包
核心实现步骤
权限与设备特性配置
- Android:在
android/app/src/main/AndroidManifest.xml中添加传感器特性声明(无需强制要求,适配无传感器设备):
访问本地传感器无需额外权限,若需后台持续监听,需补充配置后台权限。<uses-feature android:name="android.hardware.sensor.temperature" android:required="false"/> <uses-feature android:name="android.hardware.sensor.humidity" android:required="false"/> - iOS:常规场景无需额外权限,若需后台监听,需在
Info.plist中添加对应后台模式权限。
- Android:在
传感器数据监听
选择合适的传感器包,初始化监听回调,实时获取温湿度原始数据。数据处理与展示
可对原始数据做平滑处理(如滑动平均),消除波动,再在UI上实时展示,或存储到本地/云端。异常处理
针对设备无传感器、权限被拒、数据异常等情况,给出明确的用户提示,避免崩溃。
推荐相关包
1. sensors_plus
官方维护的传感器插件,支持温湿度在内的多种传感器,API简洁,兼容性强。
- 安装:
flutter pub add sensors_plus - 核心用法:通过
temperatureEvents和humidityEvents流监听数据更新
2. flutter_sensors
功能全面的传感器库,提供传感器精度、采样率等详细信息,支持自定义监听参数。
3. environmental_sensors
专注于环境类传感器的包,针对温湿度、气压等环境数据做了优化,数据回调更精准。
示例代码(基于sensors_plus)
import 'package:flutter/material.dart'; import 'package:sensors_plus/sensors_plus.dart'; class TempHumidityTracker extends StatefulWidget { const TempHumidityTracker({super.key}); @override State<TempHumidityTracker> createState() => _TempHumidityTrackerState(); } class _TempHumidityTrackerState extends State<TempHumidityTracker> { double? _temperature; double? _humidity; @override void initState() { super.initState(); // 监听温度数据 temperatureEvents.listen((event) { setState(() => _temperature = event.temperature); }); // 监听湿度数据 humidityEvents.listen((event) { setState(() => _humidity = event.humidity); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('温湿度追踪')), body: Padding( padding: const EdgeInsets.all(20.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( '当前温度: ${_temperature?.toStringAsFixed(1) ?? '未检测到传感器'} °C', style: const TextStyle(fontSize: 18), ), const SizedBox(height: 30), Text( '当前湿度: ${_humidity?.toStringAsFixed(1) ?? '未检测到传感器'} %', style: const TextStyle(fontSize: 18), ), ], ), ), ); } }
注意事项
- 并非所有移动设备都内置温湿度传感器(多数手机无此硬件),测试时需使用支持的设备。
- 传感器原始数据可能存在波动,可通过滑动平均等算法进行数据平滑。
- 后台持续监听需额外配置系统权限,同时要考虑设备功耗问题。
内容的提问来源于stack exchange,提问作者Jackson
相关产品推荐
相关产品推荐

