设备管理
更新时间:2026-04-03 11:20:37
包括设备绑定,设备解绑,设备列表
// 导入头文件
import 'package:airtc_engine/src/device_center/rtcx_add_device.dart';
import 'package:airtc_engine/src/device_center/rtcx_add_device_controller.dart';
import 'package:airtc_engine/src/device_center/rtcx_device.dart';
设备绑定
1. 无线绑定(如: 二维码、蓝牙等方式)
总体介绍参考设备绑定开发指南。
class RTCXFluAddDeviceApi {
/// 添加设备
/// 准备添加设备,成功才可以进行下一步
void prepareAddDevice();
/// 添加事件回调
void onDeviceAddListener();
/// 开始添加设备,成功才可以进行下一步
void startAddDevice(RTCXFluDeviceAddReq req);
/// 停止添加设备
void stopAddDevice();
}
注意
- 需要prepareAddDevice:方法之前注册监听
调用示例如下:
- 注册监听,并准备绑定
final addDeviceApi = RTCXFluAddDeviceController();
@override
void initState() {
super.initState();
addDeviceApi.onDeviceAddListener();
addDeviceApi.onDeviceAdd.listen((data) {
if (data.status ==
RTCXFluDeviceAddStatus.RTCXFluDeviceAddStatus_Success) {
Fluttertoast.showToast(msg: "绑定成功");
} else if (data.status ==
RTCXFluDeviceAddStatus.RTCXFluDeviceAddStatus_Prepared) {
Fluttertoast.showToast(msg: "已准备好添加设备");
debugPrint("error : ${data.error.code} -- ${data.error.message}");
} else {
Fluttertoast.showToast(
msg: "绑定结果:${data.status.name} + error:$data.error",
);
}
});
// 准备绑定
addDeviceApi.prepareAddDevice();
}
- 开始绑定
addDeviceApi.startAddDevice(
RTCXFluDeviceAddReq(
productKey: "productKey",
deviceName: "deviceName",
),
);
- 结束绑定(该方法可以不调用,内部会自动处理)
addDeviceApi.stopAddDevice();
设备解绑
final deviceApi = RTCXFluDeviceApi();
// 解绑设备
try {
final result = await deviceApi.deviceUnbind('iotId');
if (result.success == true) {
Fluttertoast.showToast(msg: '解绑成功');
} else {
Fluttertoast.showToast(msg: '解绑失败');
}
} catch (e) {
Fluttertoast.showToast(msg: '解绑失败: $e');
}
设备列表
class RTCXFluDeviceApi {
/// 获取设备列表信息
@async
RTCXFluDeviceInfoList getDeviceList(RTCXFluQueryDeviceListReq req);
/// 获取子设备列表
@async
RTCXFluDeviceInfoList getSubDeviceList(RTCXFluQuerySubDeviceListReq req);
}
获取设备列表、获取子设备列表调用示例
- 获取设备列表
try {
final req = RTCXFluQueryDeviceListReq(pageNo: 1, pageSize: 10);
RTCXFluDeviceInfoList result = await deviceApi.getDeviceList(req);
setState(() {
dataList = result.data;
// 判断是否还有更多
bool hasMore = (result.data?.length ?? 0) < (result.total ?? 0);
});
} catch (e) {
Fluttertoast.showToast(msg: "获取设备列表失败: $e");
}
- 获取子设备列表
try {
final req = RTCXFluQuerySubDeviceListReq(
iotId: "iotId",
productKey: "productKey",
deviceName: "deviceName",
pageNo: 1,
pageSize: 10,
);
RTCXFluDeviceInfoList result = await deviceApi.getSubDeviceList(req);
setState(() {
dataList = result.data;
// 判断是否还有更多
bool hasMore = (result.data?.length ?? 0) < (result.total ?? 0);
});
} catch (e) {
Fluttertoast.showToast(msg: "获取子设备列表失败: $e");
}
修改设备昵称
class RTCXFluDeviceApi {
/// 设置设备昵称
@async
RTCXFluDeviceResult setDeviceNickName(RTCXFluDeviceNickdNameSetReq req);
}
修改设备昵称调用示例
try {
RTCXFluDeviceNickdNameSetReq req = RTCXFluDeviceNickdNameSetReq(iotId: '', nickName: '');
final result = await deviceApi.setDeviceNickName(req);
if (result.success == true) {
Fluttertoast.showToast(msg: '修改成功');
} else {
Fluttertoast.showToast(msg: '修改失败');
}
} catch (e) {
Fluttertoast.showToast(msg: '修改失败: $e');
}
设备缩略图
通过物模型服务获取设备缩略图
// 导入物模型头文件
import 'package:airtc_engine/src/thing/rtcx_thing.dart';
import 'package:airtc_engine/src/thing/rtcx_thing_controller.dart';
late RTCXFluThingController _thingApi;
@override
void initState() {
super.initState();
// 物模型
RTCXFluThingReq req = RTCXFluThingReq(
productKey: widget.productKey,
deviceName: widget.deviceName,
iotId: widget.iotId,
deviceType: widget.deviceType,
);
_thingApi = RTCXFluThingController();
_thingApi.buildThing(req);
_thingApi.registerThingObserver();
_thingApi.onStatusChange.listen((data) {
print("onStatusChange:"+data.toString());
});
_thingApi.onDeviceTransferMessage.listen((RTCXFluThingObserver observer) {
print("onDeviceTransferMessage:"+observer.toString());
});
}
Future<void> getDeviceThumb() async {
try {
final result = await _thingApi.invokeService(
RTCXFluThingCommand(
command: "GetDevPicture",
params: {
"definition": 1,
"picType": "jpg",
},
),
);
if(result.success && result.dataObject != null) {
Map<String, dynamic> dataObjectMap = jsonDecode(result.dataObject!);
// 获取的设备缩略图
String? picUrl = dataObjectMap["downloadUrl"];
}
Fluttertoast.showToast(msg: "获取缩略图${result == true ? "成功" : "失败"}, ${result.dataObject}");
} catch(e) {
Fluttertoast.showToast(msg: "获取缩略图失败:${e.toString()}");
}
}
// 不需要的时候需要做destroy释放操作
@override
void dispose() {
super.dispose();
_thingApi.destroy();
}