Flutter蓝牙通信插件secugen_ble_plugin的使用
Flutter蓝牙通信插件secugen_ble_plugin的使用
获取开始
本项目是一个用于 Flutter 的插件包起点。这是一个专门包含 Android 和/或 iOS 平台特定实现代码的包。
对于如何开始 Flutter 开发的帮助,可以查看官方文档,该文档提供了教程、示例、移动开发指南以及完整的 API 参考。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:secugen_ble_plugin/secugen_ble_plugin.dart';
import 'package:secugen_ble_plugin_example/ble/ble_device_connector.dart';
import 'package:secugen_ble_plugin_example/ble/ble_device_interactor.dart';
import 'package:secugen_ble_plugin_example/ble/ble_logger.dart';
import 'package:secugen_ble_plugin_example/ble/ble_scanner.dart';
import 'package:secugen_ble_plugin_example/ble/ble_status_monitor.dart';
import 'package:secugen_ble_plugin_example/ble_status_screen.dart';
import 'package:secugen_ble_plugin_example/device_list.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
final _ble = FlutterReactiveBle();
final _bleLogger = BleLogger(ble: _ble);
final _scanner = BleScanner(ble: _ble, logMessage: _bleLogger.addToLog);
final _monitor = BleStatusMonitor(_ble);
final _connector = BleDeviceConnector(
ble: _ble,
logMessage: _bleLogger.addToLog,
);
final _serviceDiscoverer = BleDeviceInteractor(
bleDiscoverServices: (deviceId) async {
await _ble.discoverAllServices(deviceId);
return _ble.getDiscoveredServices(deviceId);
},
logMessage: _bleLogger.addToLog,
readRssi: _ble.readRssi,
);
runApp(MultiProvider(providers: [
Provider.value(value: _scanner),
Provider.value(value: _monitor),
Provider.value(value: _connector),
Provider.value(value: _serviceDiscoverer),
Provider.value(value: _bleLogger),
StreamProvider<BleScannerState?>(
create: (_) => _scanner.state,
initialData: const BleScannerState(
discoveredDevices: [],
scanIsInProgress: false,
),
),
StreamProvider<BleStatus?>(
create: (_) => _monitor.state,
initialData: BleStatus.unknown,
),
StreamProvider<ConnectionStateUpdate>(
create: (_) => _connector.state,
initialData: const ConnectionStateUpdate(
deviceId: 'Unknown device',
connectionState: DeviceConnectionState.disconnected,
failure: null,
),
),
], child: MyApp()));
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _secugenBlePlugin = SecugenBlePlugin();
[@override](/user/override)
void initState() {
super.initState();
// initPlatformState();
}
[@override](/user/override)
void dispose() {
super.dispose();
}
/*Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion =
await _secugenBlePlugin.getVersion() ?? 'Unknown version';
var testmakeRecordStart = await _secugenBlePlugin.makeRecordStart(6);
var testmakeRecordCont = await _secugenBlePlugin.makeRecordCont(8);
var testloadMatchtemplate =
await _secugenBlePlugin.loadMatchTemplateWithExtraData(
extraDataSize: 1, extraData: Uint8List(20));
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}*/
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
color: Colors.lightBlue,
home: MainPage(),
);
}
/* [@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Text('Running on: $_platformVersion\n'),
),
),
);
}*/
}
Future<void> requestBluetoothPermissions() async {
if (await Permission.bluetoothScan.request().isGranted &&
await Permission.bluetoothConnect.request().isGranted &&
await Permission.locationWhenInUse.request().isGranted) {
// 权限已授予,可以继续
print("权限已授予");
} else {
// 权限被拒绝
print("权限被拒绝");
}
}
class MainPage extends StatefulWidget {
[@override](/user/override)
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
[@override](/user/override)
void initState() {
super.initState();
requestBluetoothPermissions();
}
[@override](/user/override)
Widget build(BuildContext context) => Consumer<BleStatus?>(
builder: (_, status, __) {
if (status == BleStatus.ready) {
return const DeviceListScreen();
} else {
return BleStatusScreen(status: status ?? BleStatus.unknown);
}
},
);
}
更多关于Flutter蓝牙通信插件secugen_ble_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter蓝牙通信插件secugen_ble_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
secugen_ble_plugin
是一个用于在 Flutter 应用中实现蓝牙通信的插件。它提供了一些基本的蓝牙功能,如扫描设备、连接设备、发送和接收数据等。以下是如何使用 secugen_ble_plugin
进行蓝牙通信的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 secugen_ble_plugin
的依赖:
dependencies:
flutter:
sdk: flutter
secugen_ble_plugin: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化插件
在你的 Dart 代码中,导入并初始化 secugen_ble_plugin
:
import 'package:secugen_ble_plugin/secugen_ble_plugin.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SecugenBlePlugin blePlugin = SecugenBlePlugin();
runApp(MyApp(blePlugin: blePlugin));
}
3. 扫描蓝牙设备
使用 scanDevices
方法来扫描附近的蓝牙设备:
void scanDevices() async {
List<BluetoothDevice> devices = await blePlugin.scanDevices();
devices.forEach((device) {
print('Device: ${device.name}, Address: ${device.address}');
});
}
4. 连接蓝牙设备
使用 connect
方法来连接选定的蓝牙设备:
void connectToDevice(String deviceAddress) async {
bool isConnected = await blePlugin.connect(deviceAddress);
if (isConnected) {
print('Connected to device');
} else {
print('Failed to connect to device');
}
}
5. 发送数据
使用 sendData
方法向已连接的设备发送数据:
void sendDataToDevice(String data) async {
bool isSent = await blePlugin.sendData(data);
if (isSent) {
print('Data sent successfully');
} else {
print('Failed to send data');
}
}
6. 接收数据
使用 setOnDataReceivedListener
来监听从设备接收到的数据:
void setupDataListener() {
blePlugin.setOnDataReceivedListener((String data) {
print('Received data: $data');
});
}
7. 断开连接
使用 disconnect
方法来断开与设备的连接:
void disconnectDevice() async {
bool isDisconnected = await blePlugin.disconnect();
if (isDisconnected) {
print('Disconnected from device');
} else {
print('Failed to disconnect');
}
}
8. 处理权限和蓝牙状态
在 Android 和 iOS 上,蓝牙功能可能需要特定的权限。确保在 AndroidManifest.xml
和 Info.plist
中配置了必要的权限。
Android
在 AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
iOS
在 Info.plist
中添加以下键值对:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>We need access to Bluetooth to connect to devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>We need access to Bluetooth to connect to devices.</string>
9. 处理蓝牙开关状态
你可以在应用程序中检查蓝牙是否已启用,并提示用户打开蓝牙:
void checkBluetoothStatus() async {
bool isBluetoothEnabled = await blePlugin.isBluetoothEnabled();
if (!isBluetoothEnabled) {
// 提示用户打开蓝牙
}
}
10. 完整示例
以下是一个简单的 Flutter 应用程序示例,展示了如何使用 secugen_ble_plugin
进行蓝牙通信:
import 'package:flutter/material.dart';
import 'package:secugen_ble_plugin/secugen_ble_plugin.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SecugenBlePlugin blePlugin = SecugenBlePlugin();
runApp(MyApp(blePlugin: blePlugin));
}
class MyApp extends StatelessWidget {
final SecugenBlePlugin blePlugin;
MyApp({required this.blePlugin});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: BluetoothScreen(blePlugin: blePlugin),
);
}
}
class BluetoothScreen extends StatefulWidget {
final SecugenBlePlugin blePlugin;
BluetoothScreen({required this.blePlugin});
[@override](/user/override)
_BluetoothScreenState createState() => _BluetoothScreenState();
}
class _BluetoothScreenState extends State<BluetoothScreen> {
[@override](/user/override)
void initState() {
super.initState();
setupDataListener();
}
void scanDevices() async {
List<BluetoothDevice> devices = await widget.blePlugin.scanDevices();
devices.forEach((device) {
print('Device: ${device.name}, Address: ${device.address}');
});
}
void connectToDevice(String deviceAddress) async {
bool isConnected = await widget.blePlugin.connect(deviceAddress);
if (isConnected) {
print('Connected to device');
} else {
print('Failed to connect to device');
}
}
void sendDataToDevice(String data) async {
bool isSent = await widget.blePlugin.sendData(data);
if (isSent) {
print('Data sent successfully');
} else {
print('Failed to send data');
}
}
void setupDataListener() {
widget.blePlugin.setOnDataReceivedListener((String data) {
print('Received data: $data');
});
}
void disconnectDevice() async {
bool isDisconnected = await widget.blePlugin.disconnect();
if (isDisconnected) {
print('Disconnected from device');
} else {
print('Failed to disconnect');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Bluetooth Communication'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: scanDevices,
child: Text('Scan Devices'),
),
ElevatedButton(
onPressed: () => connectToDevice('DEVICE_ADDRESS'),
child: Text('Connect to Device'),
),
ElevatedButton(
onPressed: () => sendDataToDevice('Hello, Bluetooth!'),
child: Text('Send Data'),
),
ElevatedButton(
onPressed: disconnectDevice,
child: Text('Disconnect'),
),
],
),
),
);
}
}