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.xmlInfo.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
回到顶部