当前位置: 代码迷 >> 综合 >> Flutter:手把手教你进行BLE应用的开发-flutter_blue
  详细解决方案

Flutter:手把手教你进行BLE应用的开发-flutter_blue

热度:64   发布时间:2023-12-14 11:09:16.0

一、写在前面的话

本文主要介绍在Flutter环境下开发BLE应用。主要包含以下内容:判断蓝牙是否开启、判断是否有位置权限、扫描设备、

连接设备、监听设备上报的数据(Notify)、向设备发送数据、监听设备的断开等。内容虽然简单,但是很详细。

 

二、开始

1、使用到的库

  flutter_blue: ^0.7.1+1permission_handler: "^3.2.0" # 权限

  众所周知,Flutter要使用原生的能力,就需要有原生库的支持,这里我们使用了flutter_blue来开发跟BLE相关的功能,permission_handler来开发权限检测以及申请权限的功能。在使用flutter_blue开启扫描的时候,插件会弹出系统的权限申请窗口,但是点击授权以后报了一个空指针,可能是插件存在的一个BUG,所以这里我们用permission_handler插件来处理权限相关的问题。(友情提示:在Android上扫描Ble需要位置权限)

2、flutter_blue的用法

import 'package:flutter_blue/flutter_blue.dart';
FlutterBlue flutterBlue = FlutterBlue.instance;

导包和初始化。

3、判断蓝牙是否开启

@overridevoid initState() {super.initState();flutterBlue.state.listen((state){if(state == BluetoothState.on){print('蓝牙状态为开启');isBleOn = true;}else if(state == BluetoothState.off){print('蓝牙状态为关闭');isBleOn = false;}});}

在路由初始化的时候开启对蓝牙状态的监听。

 if(!isBleOn){ToastUtils.toast(context, "手机蓝牙未打开,请打开后再扫描设备");return;}

在开始之前对蓝牙开启状态进行判断。

4、判断位置权限

PermissionUtils.checkPermissions(PermissionGroup.location).then((v) {if (v) {Navigator.pushNamed(context, "/device_page");} else {PermissionUtils.showDialog(context, "提示", "扫描蓝牙需要位置权限", () async {Navigator.pop(context);await PermissionHandler().requestPermissions([PermissionGroup.location]);