安卓手机蓝牙app开发(安卓手机蓝牙app开发)

小程序开发 2028
今天给各位分享安卓手机蓝牙app开发的知识,其中也会对安卓手机蓝牙app开发进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、蓝牙上位机app有哪些

今天给各位分享安卓手机蓝牙app开发的知识,其中也会对安卓手机蓝牙app开发进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

蓝牙上位机app有哪些

做安卓手机APP通常使用高端大气的Android Studio,开发语言是Java,该开发IDE就是体积大

学习成本高,入手慢,这里给大家推荐一款国产的软件,体积小,运行和编译速度快。最重要的是编程语言是中文

这个软件就是E4A.

本次我将向大家介绍如何使用E4A开发BLE蓝牙手机上位机APP。

当然,该软件自带了丰富的例子,也提供了一个BLE例子,大家可以借鉴。

由于没有提供各种库的说明文档和帮助文件,学这个软件可能有经过一段摸索,这里我将向大家介绍我在开发这个软件中

获得的经验。

中文编程语言:易语言,采用中文作为关键字,但是编程的语法和思想和C语言是类似的

为了方便理解,这里我结合单片机开发的思路简单介绍一下

变量要声明类型

对象操作的函数称为:方法

对象可触发的中断函数称为:事件

对象可设置的参数称为:属性

-----------------------------------------------------------------------------------------

好接下来介绍 BLE蓝牙库

BLE(Bluetooth Low Energe)低功耗蓝牙设备主要用于智能穿戴和物联网。

BLE蓝牙类库,包含两种操作:方法和事件

方法:

初始化

置可被发现

开始搜索

停止搜索

连接设备

断开连接

释放资源

是否可读

是否可写

是否可通知

读取数据

写入数据

事件:

创建完毕

发现设备

信号强度改变

发现服务

连接状态改变

读取数据完毕

通道数据改变

由于不存在可见的对象,因此蓝牙没有属性设置。

了解方法和事件的用法可通过左侧类库目录选中对应的条目,在下面的提示信息中查看

例如选中BLE蓝牙库的方法 初始化 条目后:

方法:初始化()为 逻辑型

分类:BLE蓝牙类库---BLE蓝牙

注释:初始化BLE蓝牙设备,成功返回真,失败返回假,BLE蓝牙需要安卓4.3以上系统的支持。

另外 事件类似中断函数,因此在代码中没有先后顺序,可以根据易读的排列顺序进行排版。

所有的动作均属于触发的事件,因此,方法通常在事件里面进行调用。

自己创建的函数,需要自己实现该函数的具体过程,因此函数在这里称为:过程

不过我们这里做BLE蓝牙APP可以不用到过程。

好了,基本的概念已经介绍了,我们可以开始整了。

-----------------------------------------------------------------------------------------

第一步,先根据我们的需要完成可视化的组件布局,并给添加的组件起上一个跟操作相关的名字,在组件的属性对话框设置,同时可以设置组件的其他相关属性。

第二步,使用中需要完成单击响应的,我们可以在设计区直接双击组件,即可自动在代码区生成一个空的事件(类似单片机开发中的中断处理函数,用于响应单击事件),例如四个方向键的单击事件。以下代码我已经填充了单击后执行的蓝牙方法:写入数据,即发数据给连接到手机的蓝牙模块。

事件 按钮上.被单击()

BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("上\n","GBK"))

结束 事件

事件 按钮下.被单击()

BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("下\n","GBK"))

结束 事件

事件 按钮左.被单击()

BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("左\n","GBK"))

结束 事件

事件 按钮右.被单击()

BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节("右\n","GBK"))

结束 事件

第三步,完成主窗口的创建工作,因为我们要使用蓝牙库,所以我们可以在APP启动后就申请使用蓝牙的权利,并初始化一个蓝牙对象。

另外就是要实现软件退出的操作,所以我们可以设置一个退出的按钮,实现结束程序。内容如下。

事件 主窗口.创建完毕()

'安卓6.0以上的系统需要动态申请权限,否则app可能无法正常运行

如果 权限操作1.取系统版本号()=23 则

权限操作1.申请全部权限()

结束 如果

变量 结果 为 逻辑型

结果 = BLE蓝牙1.初始化()

弹出提示("初始化结果:" 结果)

结束 事件

事件 权限操作1.申请完毕(权限数组 为 文本型(),申请结果 为 整数型())

'可以把需要特殊权限的代码写在此处,当申请权限成功后再执行相关代码

结束 事件

事件 图片框_返回.被单击()

结束程序()

结束 事件

第四步,实现蓝牙设备的搜索,从搜索到的蓝牙信号中选出我们要的那个,另外在搜索的过程中显示信号的强度

通过按钮单击实现搜索与停止搜索,并设定搜索时间为10秒,10秒后自动停止搜索。

通过发现设备事件,读取搜到的设备,并匹配名称是否为自己要找的信号。这里我内置了信号名称,也可以通过一个输入框,实现敏感信号名称的修改

如果发现的设备名称是指定名字的信号,就将名称和地址写入到列表框的项目,同时给项目做个编号和标记,方便后面取出

使用信号强度改变事件读取搜索中的信号强度,我们只读取感兴趣的那个名字的信号。

当列表中出现我们感兴趣的那个信号名称和地址时候,我们可以单击列表中的该项,触发连接设备,实现手机与蓝牙模块的连接。

同时通过颜色和文字提示是否连接上或者断开了。这可以使用BLE蓝牙对象的连接状态改变事件实现。

事件 搜索按钮.被单击()

如果 搜索按钮.标题 = "开始搜索" 则

位置传感器1.开始监测()

BLE蓝牙1.开始搜索()

时钟1.时钟周期 = 10*1000

搜索按钮.标题 = "停止搜索"

否则

BLE蓝牙1.停止搜索()

时钟1.时钟周期 = 0

搜索按钮.标题 = "开始搜索"

结束 如果

结束 事件

事件 时钟1.周期事件()

BLE蓝牙1.停止搜索()

搜索按钮.标题 = "开始搜索"

时钟1.时钟周期 = 0

结束 事件

事件 BLE蓝牙1.发现设备(名称 为 文本型,地址 为 文本型,MajorID 为 整数型,MinorID 为 整数型,配对状态 为 整数型)

如果 名称 = "BT24" 则

'屏蔽掉没有名称的蓝牙设备

弹出提示("发现设备")

列表框1.添加项目("名称:" 名称 "\n地址:" 地址)

列表框1.置项目标记(列表框1.取项目数()-1,地址)

结束 如果

结束 事件

事件 BLE蓝牙1.信号强度改变(名称 为 文本型,地址 为 文本型,信号强度 为 整数型)

如果 名称 = "BT24" 则

列表框1.置项目内容(0,"名称:" 名称 "\n地址:" 地址 "\n信号:" 信号强度)

结束 如果

结束 事件

事件 列表框1.表项被单击(项目索引 为 整数型)

设备地址 = 列表框1.取项目标记(项目索引)

BLE蓝牙1.连接设备(设备地址)

'BLE蓝牙1.连接设备(列表框1.取项目标记(项目索引))

弹出提示("正在连接")

连接状态.标题 = "正在连接"

结束 事件

事件 BLE蓝牙1.连接状态改变(状态 为 整数型)

如果 状态 = 1 则

连接状态.标题 = "已连接"

连接状态.背景颜色 = 绿色

否则

连接状态.标题 = "已断开"

连接状态.背景颜色 = 红色

结束 如果

结束 事件

第五步,通过服务提供的通道进行数据传输

连接上蓝牙模块后,就要建立通信的通道了,这需要通过服务来完成,因此我们要对连接的蓝牙模块索取服务的操作

这称为发现服务 事件,由于蓝牙模块中有多个服务可选,我们要找到我们可以进行通信的那个,这个通常在模块的手册也给了相关的短ID

称为服务UUID,每个服务又含有若干个通道UUID。因为模块的出厂设定,只有能用的那个服务才能通信,其他的服务是不可完全可读写的

在产生BLE蓝牙的发现服务事件后,会自动获取到服务的所有信心,装载到一个名字叫:服务信息的集合里,这个集合类型你就当类似C语言结构体数组的东西。

接下来为了验证每个服务是否可读写,就要一个一个测试,这类似,从一个结构体数组先一个一个读出来数组的元素,在数组元素的结构体里取结构体成员,

这就需要用到两层的for循环了,E4A 的for循环用一对 判断循环首---判断循环尾,进行包围。为了方便记,你可以给循环的变量起名字:i,j

然后就是测试对应的服务与通道是否可读,可写,可通知。如果三者都满足,那就是我们要找的通道,实际上,在多组的服务中,只有厂家指定的那组是

满足这三个条件的。其他的一般只能满足可读这一条。

找到合适的服务与通道后,想实现数据的接收,要执行 读取数据的方法,如果直接读,那么系统没有准备好呢,会导致读失败,后面就容易卡死。

这里就像初始化完单片机,要给系统以反应时间,等待个几百毫秒,然后再进行后面的操作一样。

这里就要用到定时器了,找到服务与通道后执行一个1000ms定时器的启动操作,在定时器计数满了之后的事件中执行读取数据的方法,

同时接收框显示服务和通道的ID,并关闭定时器。

事件 BLE蓝牙1.发现服务(服务信息 为 集合)

如果 服务信息.取项目总数() 0 则

退出

结束 如果

变量 i 为 整数型

变量 j 为 整数型

变量 信息数组 为 文本型()

i = 0

判断循环首 i 服务信息.取项目总数()

信息数组 = 服务信息.取项目(i)

j = 0

判断循环首 j 取数组成员数(信息数组)

如果 j 0 则

如果 BLE蓝牙1.是否可读(信息数组(0),信息数组(j)) = 真 且 BLE蓝牙1.是否可写(信息数组(0),信息数组(j)) =真 且 BLE蓝牙1.是否可通知(信息数组(0),信息数组(j)) =真 则

服务UUID = 信息数组(0)

通道UUID = 信息数组(j)

'BLE蓝牙1.读取数据(服务UUID,通道UUID)

'接收框.内容 = 服务UUID "\n" 通道UUID

时钟2.时钟周期 = 1000

结束 如果

结束 如果

j = j + 1

判断循环尾

i = i + 1

判断循环尾

结束 事件

事件 时钟2.周期事件()

BLE蓝牙1.读取数据(服务UUID,通道UUID)

接收框.内容 = 服务UUID "\n" 通道UUID

时钟2.时钟周期 = 0

结束 事件

执行完读取操作后,系统会在通道内有数据发送来的时候触发通道数据改变的事件,在该事件中我们读取数据,另外也会触发读取完毕的事件

发送数据是通过单击发送按钮触发写入数据方法实现的,当完成写入后可通过写入数据完毕事件知道是否发送成功。

事件 BLE蓝牙1.读取数据完毕(结果 为 整数型,服务UUID 为 文本型,通道UUID 为 文本型,数据 为 字节型())

如果 结果 = 1 则

弹出提示("读取数据成功:" 通道UUID "\n数据:" 字节集到十六进制(数据))

否则

弹出提示("读取数据失败:" 通道UUID "\n数据:" 字节集到十六进制(数据))

结束 如果

结束 事件

事件 BLE蓝牙1.通道数据改变(服务UUID 为 文本型,通道UUID 为 文本型,数据 为 字节型())

弹出提示("通道数据改变" 通道UUID "\n数据:" 字节集到十六进制(数据))

接收框.加入文本(字节到文本(数据,"GBK"))

结束 事件

事件 发送按钮.被单击()

BLE蓝牙1.写入数据(服务UUID,通道UUID,文本到字节(发送框.内容,"GBK"))

结束 事件

事件 BLE蓝牙1.写入数据完毕(结果 为 整数型)

如果 结果 = 1 则

弹出提示("写入数据成功")

否则

弹出提示("写入数据失败")

结束 如果

结束 事件

其他的操作可在以下完整代码中查看

变量 服务UUID 为 文本型

变量 通道UUID 为 文本型

变量 设备地址 为 文本型

事件 主窗口.创建完毕()

'安卓6.0以上的系统需要动态申请权限,否则app可能无法正常运行

如果 权限操作1.取系统版本号()=23 则

权限操作1.申请全部权限()

结束 如果

变量 结果 为 逻辑型

结果 = BLE蓝牙1.初始化()

弹出提示("初始化结果:" 结果)

结束 事件

事件 权限操作1.申请完毕(权限数组 为 文本型(),申请结果 为 整数型())

'可以把需要特殊权限的代码写在此处,当申请权限成功后再执行相关代码

结束 事件

事件 图片框_返回.被单击()

结束程序()

结束 事件

事件 搜索按钮.被单击()

如果 搜索按钮.标题 = "开始搜索" 则

位置传感器1.开始监测()

BLE蓝牙1.开始搜索()

时钟1.时钟周期 = 10*1000

搜索按钮.标题 = "停止搜索"

否则

BLE蓝牙1.停止搜索()

时钟1.时钟周期 = 0

搜索按钮.标题 = "开始搜索"

结束 如果

结束 事件

事件 时钟1.周期事件()

BLE蓝牙1.停止搜索()

搜索按钮.标题 = "开始搜索"

时钟1.时钟周期 = 0

Android开发之蓝牙(Bluetooth)

在上一篇中有介绍了Wifi与网络连接处理

Android开发之WiFi与网络连接处理

下面,来继续说说Android中蓝牙的基本使用。

Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(10米),常用于连接耳机、鼠标和移动通讯设备等。

值得一提的是:

android4.2新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能正常使用。

BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。

first:we need permission

要操作蓝牙,先要在AndroidManifest.xml里加入权限

**下面来看看如何使用蓝牙。 **↓↓↓****

Demo已就绪:

返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。

打开蓝牙设备的方式:

1.直接调用函数enable()去打开蓝牙设备 ;

2.系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

注意: 1.如果蓝牙已经开启,不会弹出该Activity界面。2.在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。

1. 搜索蓝牙设备

使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备

startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。

系统开始搜索蓝牙设备

^( *  ̄(oo) ̄ ) ^ 系统会发送以下三个广播:

2.扫描设备

3.定义广播接收器接收搜索结果

4.注册广播

获取附近的蓝牙设备

第一步建立连接:首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接,服务端BluetoothServerSocket和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接。

(这里的服务端和客户端是相对来说的)

两个蓝牙设备之间的连接,则必须实现服务端与客户端的机制。

当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。

服务端设备与客户端设备获取BluetoothSocket的途径是不同的。

1,服务端设备是通过accepted一个incoming connection来获取的,

2,客户端设备则是通过打开一个到服务端的RFCOMM channel来获取的。

服务端

通过调用BluetoothAdapter的listenUsingRfcommWithServiceRecord(String, UUID)方法来获取BluetoothServerSocket(UUID用于客户端与服务端之间的配对)

客户端

调用BluetoothService的createRfcommSocketToServiceRecord(UUID)方法获取BluetoothSocket(该UUID应该同于服务端的UUID)。

调用BluetoothSocket的connect()方法(该方法为block方法),如果UUID同服务端的UUID匹配,并且连接被服务端accept,则connect()方法返回。

数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式

获取流

该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。

好多东西我也不知道怎么描述,下面给出Demo:

刚好有刚学习的小伙伴问我ListView怎么用,那我就用ListView。

源码:

RairDemo

GitHub:

Coding:

如何开发简单的调试蓝牙app

分两种情况:

你懂技术,安卓JAVA或苹果OC。有一定的技术基础,并且愿意去学习和尝试,简单的蓝牙app其实真的简单,就是通过蓝牙协议进行软硬件联调,指令也就那几条,只要调通就好了。

不懂技术。那就百度一家app技术公司去咨询,然后把项目外包给他们,当然一定要货比三家。

Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码)

万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。

涉及ble蓝牙通讯的客户端(开启、扫描、连接、发送和接收数据、分包解包)和服务端(初始化广播数据、开始广播、配置Services、Server回调操作)整个环节以及一些常见的问题即踩过的一些坑。

比如

1、在Android不同版本或不同手机的适配问题,扫描不到蓝牙设备

2、如何避免ble蓝牙连接出现133错误?

3、单次写的数据大小有20字节限制,如何发送长数据

蓝牙有传统(经典)蓝牙和低功耗蓝牙BLE(Bluetooth Low Energy)之分,两者的开发的API不一样,本文主讲Ble蓝牙开发,传统蓝牙不展开,有需要的可以自行了解。

相对传统蓝牙,BLE低功耗蓝牙,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输。

客户端

服务端

Android4.3(API Level 18)开始引入BLE的核心功能并提供了相应的 API。应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等操作。

BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于android.bluetooth包和android.bluetooth.le包的几个类:

android.bluetooth.

.BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识

.BluetoothGattCharacteristic 包含单个值和多个Descriptor, 含有唯一的UUID作为标识

.BluetoothGattDescriptor 对Characteristic进行描述, 含有唯一的UUID作为标识

.BluetoothGatt 客户端相关

.BluetoothGattCallback 客户端连接回调

.BluetoothGattServer 服务端相关

.BluetoothGattServerCallback 服务端连接回调

android.bluetooth.le.

.AdvertiseCallback 服务端的广播回调

.AdvertiseData 服务端的广播数据

.AdvertiseSettings 服务端的广播设置

.BluetoothLeAdvertiser 服务端的广播

.BluetoothLeScanner 客户端扫描相关(Android5.0新增)

.ScanCallback 客户端扫描回调

.ScanFilter 客户端扫描过滤

.ScanRecord 客户端扫描结果的广播数据

.ScanResult 客户端扫描结果

.ScanSettings 客户端扫描设置

BLE设备分为两种设备: 客户端(也叫主机/中心设备/Central), 服务端(也叫从机/外围设备/peripheral)

客户端的核心类是 BluetoothGatt

服务端的核心类是 BluetoothGattServer 和 BluetoothLeAdvertiser

BLE数据的核心类是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

下面详细讲解下客户端和服务端的开发步骤流程

安卓手机涉及蓝牙权限问题,蓝牙开发需要在AndroidManifest.xml文件中添加权限声明:

在搜索设备之前需要询问打开手机蓝牙:

注意: BLE设备地址是动态变化(每隔一段时间都会变化),而经典蓝牙设备是出厂就固定不变了!

通过扫描BLE设备,根据设备名称区分出目标设备targetDevice,下一步实现与目标设备的连接,在连接设备之前要停止搜索蓝牙;停止搜索一般需要一定的时间来完成,最好调用停止搜索函数之后加以100ms的延时,保证系统能够完全停止搜索蓝牙设备。停止搜索之后启动连接过程;

BLE蓝牙的连接方法相对简单只需调用connectGatt方法;

参数说明

与设备建立连接之后与设备通信,整个通信过程都是在BluetoothGattCallback的异步回调函数中完成;

BluetoothGattCallback中主要回调函数如下:

上述几个回调函数是BLE开发中不可缺少的;

当调用targetdDevice.connectGatt(context, false, gattCallback)后系统会主动发起与BLE蓝牙设备的连接,若成功连接到设备将回调onConnectionStateChange方法,其处理过程如下:

判断newState == BluetoothGatt.STATE_CONNECTED表明此时已经成功连接到设备;

mBluetoothGatt.discoverServices();

扫描BLE设备服务是安卓系统中关于BLE蓝牙开发的重要一步,一般在设备连接成功后调用,扫描到设备服务后回调onServicesDiscovered()函数,函数原型如下:

BLE蓝牙开发主要有负责通信的BluetoothGattService完成的。当且称为通信服务。通信服务通过硬件工程师提供的UUID获取。获取方式如下:

具体操作方式如下:

开启监听,即建立与设备的通信的首发数据通道,BLE开发中只有当客户端成功开启监听后才能与服务端收发数据。开启监听的方式如下:

BLE单次写的数据量大小是有限制的, 通常是20字节 ,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

监听成功后通过向 writeCharacteristic写入数据实现与服务端的通信。写入方式如下:

其中:value一般为Hex格式指令,其内容由设备通信的蓝牙通信协议规定;

若写入指令成功则回调BluetoothGattCallback中的onCharacteristicWrite()方法,说明将数据已经发送给下位机;

若发送的数据符合通信协议,则服务端会向客户端回复相应的数据。发送的数据通过回调onCharacteristicChanged()方法获取,其处理方式如下:

通过向服务端发送指令获取服务端的回复数据,即可完成与设备的通信过程;

当与设备完成通信之后之后一定要断开与设备的连接。调用以下方法断开与设备的连接:

源码上传在CSDN上了,有需要的可以借鉴。

===== Android蓝牙Ble通讯Demo示例源码–扫描,连接,发送和接收数据,分包解包

BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

总体流程如下:

1、定义通讯协议,如下(这里只是个举例,可以根据项目需求扩展)

2、封装通用发送数据接口(拆包)

该接口根据会发送数据内容按最大字节数拆分(一般20字节)放入队列,拆分完后,依次从队列里取出发送

3、封装通用接收数据接口(组包)

该接口根据从接收的数据按协议里的定义解析数据长度判读是否完整包,不是的话把每条消息累加起来

4、解析完整的数据包,进行业务逻辑处理

5、协议还可以引入加密解密,需要注意的选算法参数的时候,加密后的长度最好跟原数据长度一致,这样不会影响拆包组包

一般都是Android版本适配以及不同ROM机型(小米/红米、华为/荣耀等)(EMUI、MIUI、ColorOS等)的权限问题

蓝牙开发中有很多问题,要静下心分析问题,肯定可以解决的,一起加油;

如何使用Android蓝牙开发

Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。本文档描述了怎样利用android平台提供的蓝牙API去实现蓝压设备之间的通信。蓝牙具有point-to-point 和 multipoint两种连接功能。

使用蓝牙API,可以做到:

* 搜索蓝牙设备

* 从本地的Bluetooth adapter中查询已经配对的设备

* 建立RFCOMM通道

* 通过service discovery连接到其它设备

* 在设备之间传输数据

* 管理多个连接

基础知识

本文档介绍了如何使用Android的蓝牙API来完成的四个必要的主要任务,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备(配对的或可见的)、连接、传输数据。

所有的蓝牙API在android.bluetooth包中。实现这些功能主要需要下面这几个类和接口:

BluetoothAdapter

代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入口。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。

BluetoothDevice

代表了一个远端的蓝牙设备, 使用它请求远端蓝牙设备连接或者获取 远端蓝牙设备的名称、地址、种类和绑定状态。 (其信息是封装在 bluetoothsocket 中) 。

BluetoothSocket

代表了一个蓝牙套接字的接口(类似于 tcp 中的套接字) ,他是应用程 序通过输入、输出流与其他蓝牙设备通信的连接点。

BluetoothServerSocket

代表打开服务连接来监听可能到来的连接请求 (属于 server 端) , 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。 当远端设备发起连 接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket 类将会返回一个 bluetoothsocket。

BluetoothClass

描述了一个设备的特性(profile)或该设备上的蓝牙大致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。可以用它来进行一些UI上的提示。

BluetoothProfile

BluetoothHeadset

提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V1.5)模式。

BluetoothA2dp

定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。 “A2DP的”代表高级音频分配模式。

BluetoothHealth

代表了医疗设备配置代理控制的蓝牙服务

BluetoothHealthCallback

一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。

Android 蓝牙开发(一)

普通蓝牙设备官方文档

Android 平台包含蓝牙网络堆栈支持 ,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作:

传统蓝牙适用于电池使用强度较大的操作,例如 Android 设备之间的流传输和通信等。针对具有低功耗要求的蓝牙设备,Android 4.3(API 18)中引入了面向低功耗蓝牙的 API 支持。

使用 Android Bluetooth API 来完成使用蓝牙进行通信的四项主要任务: 设置蓝牙 、 查找局部区域内的配对设备或可用设备 、 连接设备 ,以及在 设备之间传输数据 。

关于蓝牙的 API 在 android.bluetooth 包中,下面介绍一下和蓝牙相关的主要类:

在 BluetoothProfile IPC 客户端连接到服务(即,运行特定配置文件的内部服务)或断开服务连接时向其发送通知的接口。

使用蓝牙必须声明权限 BLUETOOTH 才可以执行蓝牙通信。

1、获取蓝牙适配器

例如:我们可以查询所有已配对的设备,然后使用 ArrayAdapter 向用户显示每台设备的名称:

要发起连接仅需要知道目标蓝牙设备的 Mac 地址就可以了。

注意 执行 discovery 对于蓝牙适配器来说是一个非常繁重的过程,并且会消耗大量资源。在找到要连接的设备后, 要确保使用 cancelDiscovery() 来停止发现,然后尝试连接 。如果您已经和某台设备进行连接,那么这个时候执行发现操作会大幅度的减少此连接可用的带宽!因此不应该在处于连接状态的时候执行发现操作!

例如:

在连接之前如果两个设备没有配对,则系统会自动发出配对请求。

服务器套接字接受连接的基本过程

放在子线程中去执行。

例子:

客户端连接的基本过程

调用 connect() 的时候要确保客户端没有执行发现操作。如果执行了会大幅度降低连接的速度,增加失败的可能。

例子

在连接之前调用 cancleDiscovery() 在进行连接之前应该始终调用这个方法,而且调用的时候无需检测是否正在扫描。

过程:

从 Android 3.0 开始, Bluetooth API 便支持使用蓝牙配置文件。蓝牙配置文件是适用于设备间蓝牙通信的无线接口规范。

1、蓝牙配置文件就是设备间通信(蓝牙设备)的一种规范

免提配置文件便是一个示例,对于连接到无线耳机的手机,两台设备都必须支持免提配置文件。我们也可以通过实现接口 BluetoothProfile 来写入自己的类来支持特定的蓝牙配置文件。Android API 提供了以下的几种蓝牙配置文件的实现:

2、使用配置文件的基本步骤

创建 HDP 应用:

关于普通蓝牙设备和普通蓝牙设备之间的连接通信

关于蓝牙设备和蓝牙仪器(蓝牙耳机、电子秤等等类似产品)

这种之间的通信是通过配置文件代理来实现的。

都有一个对应的配置文件代理类。具体的操作是通过这个对象来完成。

参考: ;mid=2247484128idx=1sn=9d59b9ad66fb68b9569c29566103c009scene=21#wechat_redirect

关于安卓手机蓝牙app开发和安卓手机蓝牙app开发的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

扫码二维码