首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取BLE广告数据-安卓scanRecord到Flutter Blue ScanResult

基础概念

BLE(Bluetooth Low Energy)是一种低功耗蓝牙技术,广泛应用于物联网设备之间的通信。BLE广告数据是通过广播包(Advertising Packet)传输的信息,包含了设备的基本信息和服务。ScanRecord 是安卓系统中用于存储从BLE设备接收到的广告数据的类。Flutter Blue 是一个Flutter插件,用于在Flutter应用中进行BLE操作。

相关优势

  1. 低功耗:BLE设计之初就是为了低功耗,适合电池供电的设备。
  2. 广泛支持:几乎所有的现代移动设备和许多物联网设备都支持BLE。
  3. 易于集成:Flutter Blue 提供了简洁的API,使得在Flutter应用中集成BLE功能变得容易。

类型

BLE广告数据可以分为以下几类:

  1. 可连接广告:设备可以接受连接请求。
  2. 不可连接广告:设备不接受连接请求,只能发送数据。
  3. 扫描响应广告:设备响应扫描请求,提供更多信息。

应用场景

BLE广告数据广泛应用于以下场景:

  • 健康监测设备:如心率监测器、血压计等。
  • 智能家居设备:如智能灯泡、智能门锁等。
  • 位置追踪设备:如蓝牙标签、钥匙扣等。

获取BLE广告数据

在安卓端,可以通过ScanRecord类获取BLE广告数据。以下是一个简单的示例代码:

代码语言:txt
复制
import android.bluetooth.le.ScanRecord;
import android.bluetooth.le.ScanResult;

public void onScanResult(int callbackType, ScanResult result) {
    ScanRecord scanRecord = result.getScanRecord();
    if (scanRecord != null) {
        byte[] data = scanRecord.getBytes();
        // 处理广告数据
    }
}

从安卓到Flutter Blue

在Flutter端,可以使用Flutter Blue插件来获取BLE广告数据。以下是一个简单的示例代码:

代码语言:txt
复制
import 'package:flutter_blue/flutter_blue.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('BLE Scanner')),
        body: BLEScanner(),
      ),
    );
  }
}

class BLEScanner extends StatefulWidget {
  @override
  _BLEScannerState createState() => _BLEScannerState();
}

class _BLEScannerState extends State<BLEScanner> {
  StreamSubscription<ScanResult> _scanSubscription;

  @override
  void initState() {
    super.initState();
    FlutterBlue flutterBlue = FlutterBlue.instance;
    _scanSubscription = flutterBlue.scanResults.listen((ScanResult r) {
      print('Device Name: ${r.device.name}');
      print('Device ID: ${r.device.id}');
      print('Scan Record: ${r.scanRecord}');
    }, onError: (error) {
      print('Error: $error');
    });
    flutterBlue.startScan(timeout: Duration(seconds: 4));
  }

  @override
  void dispose() {
    _scanSubscription.cancel();
    FlutterBlue.instance.stopScan();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Center(child: Text('Scanning...'));
  }
}

可能遇到的问题及解决方法

  1. 权限问题:确保在安卓Manifest文件中添加了BLE相关的权限。
  2. 权限问题:确保在安卓Manifest文件中添加了BLE相关的权限。
  3. 位置权限:从Android 6.0(API level 23)开始,需要动态请求位置权限。
  4. 位置权限:从Android 6.0(API level 23)开始,需要动态请求位置权限。
  5. 扫描超时:确保在扫描时设置了合适的超时时间。
  6. 扫描超时:确保在扫描时设置了合适的超时时间。
  7. 数据处理:确保正确解析和处理从ScanRecord中获取的数据。
  8. 数据处理:确保正确解析和处理从ScanRecord中获取的数据。

参考链接

通过以上步骤,你可以从安卓端获取BLE广告数据,并通过Flutter Blue在Flutter应用中处理这些数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MASA MAUI Plugin 蓝牙低功耗(一)蓝牙扫描

本文蓝牙低功耗简称为BLE 如果你对BLE的相关概念不了解,可以参考 开发者官网链接: 蓝牙低功耗-(https://developer.android.google.cn/guide/topics.../connectivity/bluetooth-le/) 本文JAVA相关代码均来自开发者官网 开发步骤 新建项目 在vs中新建一个基于MAUI Blazor的项目MauiBlueToothDemo...,然后添加一个MAUI类库项目Masa.Maui.Plugin.Bluetooth 添加权限 项目创建好了之后,我们首先介绍一下BLE需要的权限,相信大家对各种APP首次打开的权限确认弹窗应该不会陌生...我们如法炮制这部分功能,在MasaMauiBluetoothService中添加一个继承自ScanCallback内部类DevicesCallback,ScanCallback类 对应的leScanCallback...当有设备被扫描到就会触发这个方法,然后就可以通过ScanResult的Device属性来获取设备信息。

1.3K20
  • 《Android BLE 开发》--初学者

    本作者是一位初学者,之前学过JAVA,只学过三天。《BLE Tool》也是我一个项目,因为作者学习加开发只用了10天时间,目前只是把所有接口打通了,只提供如何怎么实现。...开发之前,最好了解一下BLE的通信原理。...第一步:判断设备是否支持BLE功能 第二步:通过蓝牙管理器获取蓝牙适配器 第三步:判断设备是否打开蓝牙 在MainActivity.java中添加以下代码: public boolean initialize...BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord...mBluetoothGatt == null) { return; } mBluetoothGatt.close(); mBluetoothGatt = null; } 11.功能的回调函数的实现 从第5点

    89020

    蓝牙在小程序中的应用

    (2) 功耗低:BLE4.0包含了一个低功耗标准(Bluetooth Low Energy),可以让蓝牙的功耗显著降低 (3) 安全性高:蓝牙规范提供了一套安全加密机制和授权机制,可以有效防范数据被窃取...(3) 设备地址:每个蓝牙设备都有一个设备地址deviceId,但是和IOS差别很大,下设备地址就是mac地址,但是IOS无法获取mac地址,所以设备地址是针对本机范围有效的UUID,所以这里需要注意...创建BLE连接 closeBLEConnection 关闭BLE连接 getBLEDeviceServices 获取设备的服务列表,每个蓝牙设备都有一些服务 getBLEDeviceCharacteristics...获取蓝牙设备某个服务的特征值列表 readBLECharacteristicValue 读取低功耗蓝牙设备的特征值的二进制数据值 writeBLECharacteristicValue 向蓝牙设备写入数据...Mac地址所以这里需要区分两个场景 a) 下可以根据Mac地址来搜索设备,或者跳过此步直接连接到设备。

    6K50

    我也是可以开发蓝牙应用的男人了

    我觉得也没必要专门为了这个去学,毕竟我们也不是专门从事开发的。...搭建完环境,如果想编译平台的程序,编译的时候只选择如下Kit就可以,其它都不用变 ?...第二步:找QT BLE程序 我喜欢用前人造好的轮子,在网上找到了这篇文章:https://blog.csdn.net/rsd102/article/details/112453131 ,恰巧还认识该作者小哈哥...把原作者的广告信息换成了新的广告信息,这个是重点?。 第三步:实际测试 手机安装完之后,打开APP,自动搜索周围的蓝牙,显示在蓝牙列表里 ?...测试手机发送数据给KTA6368A ? 测试KTA6368A发送数据给手机 ? 这样就初步实现了我们的目标,以后也可以出去吹牛自己也是可以开发程序的人了。

    1.2K20

    Android 低功耗蓝牙开发简述

    它保持连接并以超低功耗传输数据,低功耗蓝牙是专门针对基于物联网(IoT)设备构建的功能和应用程序设计的蓝牙版本。蓝牙BLE允许短期远程无线电连接并延长电池寿命。...一般来说你只需要实现处理onScanResult回调中ScanResult,这个类就是你所扫描到的信息。 ③ ScanResult 这里面有扫描到的基本信息,内容比较多,看看它的组成。...periodAdvertisingInterval – 定期广告间隔。 scanRecord – 扫描记录,包括广告数据和扫描响应数据。...timestampNanos – 观察扫描结果的时间戳。 这里面最常用的就是获取device,rssi。   ...写入数据,由App写入数据蓝牙设备中,可以通过gatt.writeCharacteristic()。

    1.4K10

    Android BLE 快速上手指南

    扫描时还需要我们’设置 > 安全性和位置信息 > 位置信息‘处打开位置信息, //否则将会搜索不到周围的设备 可能有人会问为什么使用低功耗蓝牙还需要位置权限?...-->获取服务,特征-->打开通知-->写特征-->读特征-->断开连接,通过这些步骤我们就能学会Android Ble 的基本方法的使用。...) { //device:扫描到的蓝牙设备对象 //rssi:扫描到的设备的信号强度,这是一个负值,值越大代表信号强度越大 //scanRecord:扫描到的设备广播的数据...mScanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult...如果大家需要了解更多更详细的使用方法,这里给大家推荐2个开源的ble库: Android-BLE-Library:NordicSemiconductor官方的Android ble库。

    2.5K20

    Android低功耗蓝牙BLE开发小结

    BLE应用权限 涉及蓝牙相关开发需要在AndroidManifest.xml中声明权限,其中位置权限在扫描LE设备时需要使用。...搜索设备非常地消耗资源,当搜索所需设备后,请立即停止扫描操作。...2另外,在API 21之后,也引入了android.bluetooth.le包及ScanRecord等类,可以直接获取服务的UUID列表,更方便地处理扫描结果。...此处讨论的包格式只讨论包中的数据段(即onLeScan()回调方法的参数byte[] scanRecord),不包括完整报文的其他部分,如前导、接入地址等。下图所示为包中数据段的格式。...UUID的列表,以下是具体代码: /** * 从广播包中获取所有服务的UUID列表 * @param scanRecord * @return */ private List getUuidsFromRecordData

    5.6K561

    Android Ble蓝牙App(一)扫描

    针对这个情况,我决定做了系列性的Ble蓝牙App,尽可能的避免在你运行的时候出现bug,所以这是一个低功耗蓝牙工具App,可以让你了解一些东西。...二、扫描准备   下面在com.llw.goodble包下新建一个ble包,里面我们需要创建一些类来处理扫描的相关事务,首先在ble包下创建一个BleCore类,里面先不写内容,然后我们在ble包下新建一个...因为后面还需要写Ble相关的数据处理,因此在ble包下创建一个BleCore类,代码如下所示: class BleCore private constructor(private val context...五、扫描结果   要显示扫描结果,首先要做的是定义一个类去装载扫描结果,在ble包下新建一个BleDevice数据类,代码如下所示: data class BleDevice( var realName...) { if (result.scanRecord!!.

    98860

    R-Plan 手把手教你开发BLE微信小程序

    背景 最近在测试BLE模块,本来想用别家的产品来测试我的BLE模块,经过一番询问,别家的BLE的MASTER模式只能配对自家的SLAVE模式。也就是说他不能配对我的BLE模块,这就让我郁闷了。绝望。...之前我也写过一篇文章《Android BLE 开发》--初学者,这个原生APP,对于一个没有任何基础的我,花了3天的时间干了这个四不像的BLE调试工具。..._discoveryStarted = false wx.stopBluetoothDevicesDiscovery() }, 监听寻找到新设备的事件,这里会将所有搜索的设备显示在列表组件中。..., 获取成功,则进行获取某个服务中的特征值。...: 设备端的接收到数据打印的log: 注明: 上面的代码介绍是BLE基础功能的介绍,对于我的BLE 自动化测试部分的代码没有介绍,因为跟项目相关。

    1.2K30

    开源项目——FLutter开发录音APP

    歌曲列表画面调用两个接口,一个接口获取当前账户录过多少首歌曲,一个接口获取歌曲列表,滑动列表为ListView,请求错误时弹出POP框。点击歌曲进入录音页面。...录音页面展示的数据均为列表画面通过构造方法传入,调用flutter_sound包录音,录音结束后将acc转换为MP3,点击上传调用接口,通过FormData上传本地的MP3文件,请求错误弹出POP。...android打包,命令:flutter build apk --split-per-abi,默认打包方式就是release,flutter build apk打出来的包特别大,因为多种架构模式的包都打在一起了...中的minSdkVersion决定了兼容的版本,21适配5.0。...如果不发布app store,需要先拿到用户的UDID,添加到Devices,然后按照官网推荐的方式获取证书Certificates,Certificates就是给开发用的电脑装的,然后生成Profiles

    1.7K00

    华为被卡脖子,到底卡的是什么?

    “作者:坚果 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术的分享,包括Flutter,小程序,,VUE,JavaScript。...GMS是Android系统灵魂所在,是一套谷歌旗下的应用程序和基于云的软件服务,当用户使用谷歌服务的时候,谷歌可以把广告嵌入各种谷歌的服务中,是谷歌的重要收入来源渠道。...只有当智能手机制造商,获得了Google的许可之后,才能在其设备上合法安装GMS。华为未来不能得到谷歌许可,意味着未来的华为手机上,将不会内嵌有GMS。...因为谷歌全家桶APP ,大部分在国内无法使用,且有微信、高德地图等替代品,华为甚至可以推出鸿蒙操作系统取代,因此在国内影响不大。 对于来说它是Android设备配置服务的一项。...而没有办法正常使用,但是没有的设备依然可以通过一些方式来获取GMS服务。

    1.5K10

    我肝了3个月终于整理出了这份超全面的《Android面试题及解析》,面试不再怕的了!

    我本来就打算年后找工作,正好趁着这段时间,历时3个月,整理了这份可能是市面上最全面的面试题解析大全!...从基础架构进阶,包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中高级技术点。 文章中所列主要为大纲部分,详细内容自行获取哈!...开发中都使用过哪些框架、平台(★★★★★) EventBus(事件处理) xUtils(网络、图片、ORM) JPush(推送平台) 友盟(统计平台) 有米(优米)(广告平台) 百度地图 bmob(服务器平台...FLUTTER 部分 1.为什么说 flutter 是原生的 2.讲一下 flutter 的几个特点/优缺点3. Flutter 和 RN 的对比。...要想成为高级工程师,必须掌握许多基础的知识。在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。 不论遇到什么困难,都不应该成为我们放弃的理由!

    1K30

    FlutterFlutter 打开第三方应用 ( url_launcher 插件搜索与安装 | url_launcher 插件官方示例 | 打开浏览器 | 打开第三方应用 )

    获取插件 : 点击右上角的 " Pub get " 按钮获取该插件 , 在下面的 Message 面板中显示 Running "flutter pub get" in flutter_cmd... 0.5s...await canLaunch(url)) { // Android 手机, 打开 Google 地图 await launch(url); } else { // 如果手机打不开说明是苹果手机...context) { return MaterialApp( title: "第三方应用跳转", theme: ThemeData(primarySwatch: Colors.blue...// Android 手机, 打开 Google 地图 await launch(url); } else { // 如果手机打不开说明是苹果手机...官网 : https://flutter.dev/ Flutter 插件下载地址 : https://pub.dev/packages Flutter 开发文档 : https://flutter.cn

    2.2K00

    Compose主题切换——让你的APP也能一键换肤

    开端 应用换肤,这真的是一个老生常谈的问题,从原生开始、后来的 Flutter ,再到现在的 Compose ,虽说老生常谈,但其实还是新瓶装旧酒。...原生的主题切换这里不再说了,这不是本文的重点,况且那个一篇文章估计也说不清。...Flutter 的主题切换主要依赖于 provider 状态管理,其实在 Compose 中也差不多,且听完娓娓道来! GitHub 地址在文章末尾。...现在主题是设置上了,那应该如何使用刚才设置主题中的那些颜色呢?亦或是别的资源?..., SKY_BLUE_THEME) 这里使用了 DataStore 来进行数据的存取,DataStore 也是 Jetpack 中的一员,感兴趣的可以看看我之前写的文章:再抱一抱DataStore 然后修改下主题方法

    77330

    基于RT-THREAD nano的平衡车--微信小程序

    原生APP虽然方便,但是不懂。所以我选择了微信小程序,虽然我不会JS,但是他的选择是最正确的。开发容易,而且方便。...因为平衡车板载BLE,微信小程序也支持BLE,所以完美搭配 软件设计 其实微信小程序我在之前已经写过一文章: R-Plan 手把手教你开发BLE微信小程序 上面这篇描述了最基本BLE版本的微信小程序开发...而在我的平衡车中,也是基于上面的代码进行补充,包括UUID的过滤,数据包的打包等功能。...过滤UUID, 获取对应UUID(0000FFE0-0000-1000-8000-00805F9B34FB)的属性: // 获取要连接设备的服务 getBLEDeviceServices...(deviceId) { this.printLog("获取设备服务: " + deviceId) wx.getBLEDeviceServices({ deviceId

    36840

    VS Code开发React-Native及Flutter 开启无线局域网真机调试问题

    笔者前段时间在做react-native开发,一直是有线连接真机进行调试的。...有线调试确实带来诸多麻烦,因为在调试过程中需要频繁和手机进行交互,导致有时候数据线脱落,就不得不重新安装debug apk,安装一次应用的时间大概在一三分钟,大量的误触就使得花在安装应用花费的时间比较长...参考文章:vscode通过wifi调试真机的Flutter应用 Vscode插件地址:ADB Interface for VSCode 下面先介绍flutter如何开启无线调试: 因为在开发react-native...不要慌,问题不大,这表明debug apk已经安装上了,只是加载不了脚本,所以要在电脑上运行脚本服务器,让从电脑的端口动态获取脚本并执行(也就是hot reload热更新) 在vscode终端运行...总结 到此这篇关于VS Code开发React-Native及Flutter 开启无线局域网真机调试问题的文章就介绍这了,更多相关VS Code React-Native Flutter 无线局域网内容请搜索

    2.5K30
    领券