Flutter集成SenseH平台功能插件senseh_sdk的使用
Flutter集成SenseH平台功能插件senseh_sdk的使用
《Sense SDK》是一个强大的工具包,它允许开发者在他们的Flutter应用程序中无缝连接和与Sense设备进行交互。
功能
- 蓝牙连接与断开
- 数据同步
- OTA/固件更新
- 获取血压、血氧饱和度和心电图1、6记录
- 生成PDF报告
开始使用
请确保蓝牙、WiFi和位置服务已打开。
使用方法
在 pubspec.yaml
中添加SDK模块路径
dependencies:
sense_sdk: ^版本号
在 android/app/main/AndroidManifest.xml
中添加权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:required="true" android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:required="true" android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"/>
<uses-feature android:name="android.hardware.wifi" />
导入包
import 'package:sense_sdk/sense_sdk.dart';
初始化SenseH SDK
SenseH senseH = SenseH();
创建实例并传递参数
senseH.instance(
apiKey: "xyz",
name: "user-name",
patientId: "currentUserId",
dob: "date of birth",
gender: "gender"
);
连接到Sense设备(确保蓝牙和位置权限已授予)
final senseDevice = await senseH.findAndConnectSenseH();
检查设备连接状态
await senseH.isDeviceConnected();
// 可以使用定时器来周期性地检查连接状态
Timer.periodic(Duration(seconds: 3), (timer) async {
final status = await senseH.isDeviceConnected();
if (mounted) {
setState(() {
bleConnected = status;
if (!bleConnected) {
isDataSyncing = false;
}
});
}
});
同步数据
await senseH.dataSync();
监听数据同步百分比
late StreamSubscription? _dataSyncSubscription;
_dataSyncSubscription = senseH.dataSyncPercentageController.stream.listen((event) {
print(event);
});
检查OTA/固件更新
final isUpdateAvailable = await senseH.checkForFirmwareUpdate();
// 如果发现新版本,开始更新
await senseH.startFirmwareUpdate();
// 监听更新进度
late StreamSubscription? _otaUpdateSubscription;
_otaUpdateSubscription = senseH.firmwareUpdatePercentageController.stream.listen(
(event) {},
onDone: () {
print("Updated latest firmware");
},
onError: (e) {
print(e);
}
);
获取生命体征记录
// 血压
await senseH.fetchBP(
patientId: patientUserId,
period: 'day',
pageIndex: '0',
limit: '20'
);
// SpO2
await senseH.fetchSP02(
patientId: patientUserId,
period: 'week',
pageIndex: '0',
limit: '20'
);
// 心电图1
await senseH.fetchECG1(
patientId: patientUserId,
period: 'quarter',
pageIndex: '0',
limit: '20'
);
// 心电图6
await senseH.fetchECG6(
patientId: patientUserId,
period: 'month',
pageIndex: '0',
limit: '20'
);
生成用户报告
await senseH.fetchReport(patientId: "UserId");
示例代码
example/lib/main.dart
// ignore_for_file: use_build_context_synchronously
import 'package:example/snack_bar.dart';
import 'package:flutter/material.dart';
import 'package:sense_sdk/sense_sdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'SENSE SDK',
theme: ThemeData(
primarySwatch: Colors.blue,
),
debugShowCheckedModeBanner: false,
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
SenseH senseH = SenseH();
instance() async {
final obj = await senseH.instance(
apiKey: "ZNFZTXY-93JMZVK-GSR1AV4-C6QSC8H",
name: "karthik M",
patientId: "1234abcd",
dob: "1998-10-30",
gender: "Male"
);
print("instance $obj");
}
// 断开与Sense设备的连接
disconnectSenseH() async {
senseH.disconnectSenseH().then((response) {
print(response);
});
}
// 数据同步
dataSync() async {
await senseH.dataSync();
senseH.dataSyncPercentageController.stream.listen((event) {
print("In TPA $event");
});
}
// 获取血压数据
fetchBP() async {
final data = await senseH.fetchBP(
patientId: "1234abcd",
period: 'month',
pageIndex: '0',
limit: '5'
);
print(data);
}
// 获取SpO2数据
fetchSpo2() async {
final data = await senseH.fetchSP02(
patientId: "1234abcd",
period: 'month',
pageIndex: '0',
limit: '5'
);
print(data);
}
// 获取心电图1数据
fetchEcg1() async {
final data = await senseH.fetchECG1(
patientId: "1234abcd",
period: 'month',
pageIndex: '0',
limit: '5'
);
print(data);
}
// 获取心电图6数据
fetchEcg6() async {
final data = await senseH.fetchECG6(
patientId: "1234abcd",
period: 'month',
pageIndex: '0',
limit: '5'
);
print(data);
}
// 获取心电图12数据
fetchEcg12() async {
final data = await senseH.fetchBP(
patientId: "1234abcd",
period: 'month',
pageIndex: '0',
limit: '5'
);
print(data);
}
// 生成报告
fetchReport() async {
final data = await senseH.fetchReport(patientId: "1234abcd");
print(data);
}
// 检查OTA更新
checkOtaUpdates() async {
final data = await senseH.checkForFirmwareUpdate();
}
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
void dispose() {
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("SENSE SDK TEST"),
),
body: Center(
child: Column(
children: [
Center(
child: ElevatedButton(
onPressed: () {
instance();
},
child: const Text("Instance"),
),
),
Center(
child: ElevatedButton(
onPressed: () async {
final status = await senseH.findAndConnectSenseH();
print("Connection Status : $status");
Snack.pop(context, status.toString());
},
child: const Text("Find and Connect"),
),
),
Center(
child: ElevatedButton(
onPressed: () {
disconnectSenseH();
},
child: const Text("Disconnect"),
),
),
Center(
child: ElevatedButton(
onPressed: () async {
await senseH.dataSync();
senseH.dataSyncPercentageController.stream.listen(
(event) {
Snack.pop(context, event.toString());
},
onDone: () => dispose(),
);
},
child: const Text("Sync data"),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Center(
child: ElevatedButton(
onPressed: () async {
await fetchBP();
},
child: const Text("Fetch BP"),
),
),
Center(
child: ElevatedButton(
onPressed: () async {
await fetchSpo2();
},
child: const Text("Fetch Spo2"),
),
),
Center(
child: ElevatedButton(
onPressed: () async {
await fetchEcg1();
},
child: const Text("Fetch ECG1"),
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Center(
child: ElevatedButton(
onPressed: () async {
await fetchEcg6();
},
child: const Text("Fetch ECG6"),
),
),
Center(
child: ElevatedButton(
onPressed: () async {
await fetchEcg12();
},
child: const Text("Fetch ECG12"),
),
),
Flexible(
child: Center(
child: ElevatedButton(
onPressed: () async {
await fetchReport();
},
child: const Text("Generate Report"),
),
),
),
],
),
Row(
children: [
Flexible(
child: Center(
child: ElevatedButton(
onPressed: () async {
await checkOtaUpdates();
},
child: const Text("Check Updates"),
),
),
),
Center(
child: ElevatedButton(
onPressed: () async {
await checkOtaUpdates();
},
child: const Text("Update firmware"),
),
),
],
),
],
),
),
);
}
}
更多关于Flutter集成SenseH平台功能插件senseh_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter集成SenseH平台功能插件senseh_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
要在Flutter应用中集成SenseH平台的功能,使用senseh_sdk
插件,你需要按照以下步骤进行操作:
1. 添加依赖
首先,在pubspec.yaml
文件中添加senseh_sdk
插件的依赖:
dependencies:
flutter:
sdk: flutter
senseh_sdk: ^1.0.0 # 请使用最新版本
然后运行flutter pub get
来获取依赖。
2. 初始化SDK
在你的Flutter应用中初始化senseh_sdk
。通常,你可以在main.dart
文件中的main
函数中进行初始化。
import 'package:flutter/material.dart';
import 'package:senseh_sdk/senseh_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化SenseH SDK
await SensehSdk.initialize(
apiKey: 'YOUR_API_KEY', // 替换为你的API Key
environment: Environment.production, // 或 Environment.sandbox
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SenseH Demo',
home: HomeScreen(),
);
}
}
3. 使用SDK功能
senseh_sdk
可能提供了多种功能,如用户认证、数据同步、设备管理等。以下是一些常见的使用示例:
用户认证
import 'package:flutter/material.dart';
import 'package:senseh_sdk/senseh_sdk.dart';
class HomeScreen extends StatelessWidget {
Future<void> _login() async {
try {
final user = await SensehSdk.login(
username: 'user@example.com',
password: 'password',
);
print('User logged in: ${user.id}');
} catch (e) {
print('Login failed: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SenseH Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _login,
child: Text('Login'),
),
),
);
}
}
数据同步
Future<void> _syncData() async {
try {
await SensehSdk.syncData();
print('Data synced successfully');
} catch (e) {
print('Data sync failed: $e');
}
}
设备管理
Future<void> _getDevices() async {
try {
final devices = await SensehSdk.getDevices();
print('Devices: ${devices.length}');
} catch (e) {
print('Failed to get devices: $e');
}
}
4. 处理权限
确保在AndroidManifest.xml
和Info.plist
中添加必要的权限。例如,如果SDK需要访问网络或设备信息,你需要在相应的配置文件中声明这些权限。
Android
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
iOS
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
5. 构建和运行
完成上述步骤后,你可以构建并运行你的Flutter应用,测试senseh_sdk
的集成情况。
flutter run