首页文章Android 手机蓝牙 (普通蓝牙篇)模块手机「Android 手机蓝牙 (普通蓝牙篇)」

Android 手机蓝牙 (普通蓝牙篇)模块手机「Android 手机蓝牙 (普通蓝牙篇)」

时间2025-01-17 06:33:53发布yu分类文章浏览142
导读:hello,大家好有很久没有更新博客了。想写的东西很多,提起笔又觉得无从下笔。可能这就是菜鸟吧!好了废话不多说,进入正题。 本篇讲的是Android手机蓝牙分为两个部分。(都是用kotlin写的) 1:普通蓝牙(手机对...

hello,大家好有很久没有更新博客了。想写的东西很多,提起笔又觉得无从下笔。可能这就是菜鸟吧!好了废话不多说,进入正题。
本篇讲的是Android手机蓝牙分为两个部分。(都是用kotlin写的)
1:普通蓝牙(手机对手机之间的通讯)
2:低功耗蓝牙(手机对设备)

首先我们用蓝牙的时候需要明白一些步骤或东西
1:两个支持蓝牙模块的手机
2:一个作为服务端,一个作为客户端。(客户端会主动连接服务端;服务端监听有没有客户端连接)
3:根据事先确定好的uuid,服务端以这个uuid创建服务,客户端连接。
4:建立通道成功后,服务端和客户端监听对方发送的数据

ok进入正题

第一步
我们需要获取到手机里面的蓝牙模块

BluetoothAdapter 那么这个类是什么呢?最好的老师就是源码

这里写图片描述

通过红色框里面的注释已经了解到这个类 是本地设备的蓝牙适配器,可以通过这个类对蓝牙做一些例如:启动,查询绑定等等的骚操作。

我们需要获取这个类


注意:这是kotlin写法
获取到BluetoothAdapter之后,需要判断一下是否为null,如果是null就代表该手机不支持蓝牙模块,就可以自己关闭了
我们拿到我们需要的东西了,然后我们需要创建服务端和客户端(因为一个手机既是服务端,也是客户端)这里我们用线程各自创建服务端和客户端

第二步

服务端 AcceptThread 作用:开启后等待远程蓝牙的连接(等待客户端连接)

我们需要获取一个 BluetoothServerSocket 来管理我们的连接

这里写图片描述

注释已经说明了,BluetoothServerSocket 可以监听传入的连接请求,并且他是一个阻塞的

listenUsingRfcommWithServiceRecord 这个方法需要说说
创建BluetoothServerSocket有两种方式
1: listenUsingRfcommWithServiceRecord (安全连接)
2: listenUsingInsecureRfcommWithServiceRecord (不安全连接)
两个区别后面括号已经给出了 我们采用第一种
listenUsingRfcommWithServiceRecord有个连个参数 一个name,一个uuid
name:你创建服务的名称
uuid : 这个是你指定的uuid (注意:uuid 必须保持一致 不然是连接不上)

连接成功后 需要通过 BluetoothServerSocket里面getRemoteDevice()这个方法来获取连接成功设备信息

到这里服务端监听客户端的监听已经写好了,是不是很简单呢?

第三步

创建监听 客户端发送过来的数据 ConnectedThread
代码很简单就是把传过来的byte数组转成我们需要的数据

可以看到我们通过mBluetoothSocket获取里面传过来的流 读出里面流的信息然后返回我们的ui线程进行数据展示
ok服务端我们已经写完了,接下来就是客户端了。

第四步
我们创建一个客户端 ConnectThread 作用:主动连接服务端开启的服务
在我们创建ConnectThread 之前呢,我们首先需要确定我们的客户端要连接哪个蓝牙的服务呢?这个时候我们需要找到我们想要连接的指定蓝牙的服务才行,否则连接是不成功的。
我们要找到指定的设备需要进行一下的流程:

1:扫描周围可见的蓝牙设备
2:找到指定的蓝牙连接 (这里就是我们创建ConnectThread 的原因)

那么我们需要进行扫描
还记得我们第一步创建得mBluetoothAdapter 这个么?这个就是扫描用到得。

是的你没有看错,就是这几句代码就可以扫描周围得设备了。
那么问题来了,从哪里能知道扫描得结果?(手动滑稽)
想知道扫描结果我们需要注册一个广播。

上面得代码都是一些基本操作,没什么好说。

var device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
通过这个代码我们可以获取到手机扫描到得蓝牙设备

现在创建ConnectThread

mSocket 是BluetoothSocket。
BLUE_UUID 是我们服务端创建服务得时候指定得uuid
这里要说一下
device创建BluetoothSocket有两种方法
1: createInsecureRfcommSocketToServiceRecord (2.3以上)
2: createRfcommSocketToServiceRecord (Android系统2.3及一下)
我们用第一个

获取socket后 我们调用她得 connect方法 就连接成功了

连接成功了以后接下来就是互相发送数据了

发送数据很简单
调用BluetoothSocket 里面getOutputStream()方法获取到输出流

buf 是你传入得byte数组

到这一步都是成功得小伙伴就大功告成了。感谢大家看到这里谢谢大家下篇就是低功耗篇了.

Demo我就不上传csdn 以前设置得免费现在全是要收费了 so你懂得 现在在git上
附上Demo地址

怒江版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com

展开全文READ MORE
手机蓝牙蓝牙普通
原始生活21天 第六季第01集在线观看苹果手机六「原始生活21天 第六季第01集在线观看」 今年流行的「全等深微曲屏」究竟算直屏还是曲屏?曲屏手机「今年流行的「全等深微曲屏」究竟算直屏还是曲屏?」