【Android】 怎么设置蓝牙等待设备连接和接收数据

项目需求

1.打开蓝牙之后等待别的蓝牙设备进行连接。
2.连接之后等待别的设备发送数据,然后接收数据。
3.跟别的蓝牙设备断开连接值进入到等待状态,等待别的蓝牙设备连接。

解决方式
//非手机终端的UUID
public static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9B34FB");
//手机终端的UUID
public static final UUID MOB_UUID = UUID.fromString("00001105-0000-1000-8000-00805f9B34FB");
    private BluetoothServerSocket mSSocket;private BluetoothSocket socket;/*** 监听客户端发起的连接*/public void listen() {try {BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();mSSocket = adapter.listenUsingRfcommWithServiceRecord(TAG, SPP_UUID); //加密传输,Android强制执行配对,弹窗显示配对码
//            mSSocket = adapter.listenUsingInsecureRfcommWithServiceRecord(TAG, MOB_UUID); //明文传输(不安全),无需配对// 开启子线程Util.EXECUTOR.execute(new Runnable() {@RequiresApi(api = Build.VERSION_CODES.KITKAT)@Overridepublic void run() {try {socket = mSSocket.accept(); // 监听连接
//                        mSSocket.close(); // 关闭监听,只连接一个设备loopRead(socket); // 循环读取} catch (Throwable e) {close();//当设备连接之后,对面设备断开蓝牙连接之后会出现一个 return -1 的异常listen();}}});} catch (Throwable e) {close();}}public void close() {super.close();try {if (socket != null) {socket.close();}if (mSSocket != null) {mSSocket.close();}} catch (Throwable e) {e.printStackTrace();}}
private BluetoothSocket mSocket;private DataOutputStream mOut;/*** 循环读取对方数据(若没有数据,则阻塞等待)*/@RequiresApi(api = Build.VERSION_CODES.KITKAT)void loopRead(BluetoothSocket socket) throws IOException {mSocket = socket;try {if (!mSocket.isConnected())mSocket.connect();mOut = new DataOutputStream(mSocket.getOutputStream());try (DataInputStream in = new DataInputStream(mSocket.getInputStream())) {byte[] buffer = new byte[1024];int bytesRead;while (true) {bytesRead = in.read(buffer);if (bytesRead == -1) {Log.e("test", "buff length: " + bytesRead);} else {byte[] data = new byte[bytesRead];System.arraycopy(buffer, 0, data, 0, bytesRead);String textData = new String(data);Log.i("test", "Received data: " + textData);}}}} catch (IOException e) {close();Log.e("test", "error io:" + e.getMessage());throw e; // 将捕获到的异常抛出}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习21天 —— 卷积神经网络(CNN):识别验证码( 第12天)

目录 一、前期准备 1.1 标签数字化 1.2 加载数据 1.3 配置数据 二、其他 2.1 损失函数 categorical_crossentropy 2.2 plt.legend(loc ) 2.3 history.history 活动地址:CSDN21天学习挑战赛 学习:深度学习100例-卷积神经网络(CNN&…

通过 SFP 接口实现千兆光纤以太网通信2

Tri Mode Ethernet MAC IP 核结构 时钟网络 IP 核内部时钟网络结构如下图所示。其中,tx_mac_aclk 为 AXI-Stream 发送接口的同步时钟, rx_mac_aclk 为 AXI-Stream 接收接口的同步时钟。由于在设计中没有使用 MDIO 接口,所以不存在时钟信号 …

二人订单共享结束制:终身受益的新模式

在当今快速发展的互联网时代,一个创新的商业模式总能引起广泛关注。其中,“二人订单共享结束制”以其独特的魅力,吸引了众多消费者和创业者的目光。这一模式不仅为消费者带来了实惠,更为创业者提供了一个全新的平台。 只需购买一…

Android的刷机模式

高通为例子。不看不知道,一看原来这么多。想以前做博通方案,就是一个web刷机包刷到死。到底是技术进步了还是以前太浅薄?!。。。 基本参考这篇:https://www.cnblogs.com/bluestorm/p/18129830 常用的应该就是OTA&…

OpenHarmony及鸿蒙应用的屏幕亮度获取以及设置

目录 一.前置知识 二.具体实现 一.前置知识 对应的OpenHarmony版本:V3.2 查找资料发现V3.2版本的OpenHarmony没有获屏幕亮度的接口,只有设置屏幕亮度的接口,这个就很奇怪,所以我最终的方案是获取屏幕亮度使用老的接口,设置屏幕亮度使用新的接口,这样就完成了这个需求…

C/C++中的 extern 和extern“C“关键字详解(通俗易懂)

前言 1、C/C extern关键字用法 2、extern "C"用法 正文 1、extern关键字 extern其实就是一个声明,明确指出一个语句是声明,比如extern int i ;这是声明变量i,而不是定义i,定义i则是int i(声明不开辟内存空…

网络数据库后端框架相关面试题

面试是工作的第一步,面试中面试官所提出的问题千奇百怪,其中关于网络数据库后端框架面试题汇总如下: 1,关系型数据库和非关系型数据库的区别 关系型数据库主要有 MYsql Iracle SQLSever等 相对于非关系型数据库的优势为查询效率…

【C++集群聊天服务器(一)】|Linux平台资源受限下boost库和muduo网络库源码编译安装

本人使用的服务器是2G2核 ubuntu22.04 前置工作 muduo库源码github仓库地址: muduo WIndows和Linux平台的boost源码包下载(zip是Windows版,tar.gz是Linux版,你也可以去boost官网下载最新版本) Boost C Libraries 由于muduo网络库是基于boo…

C语言| 输出*三角形

分析: ① 输入三角形主要分为两部分, 即输出空格和输出星号,要将它们分开,不用考虑空格数和星号个数之间的关系。 ② 从每行输出的空格个数来看,若总共输出n行,则第i行首先要输出n - i个空格,然…

基于java的CRM客户关系管理系统(二)

目录 第二章 相关技术介绍 2.1 后台介绍 2.1.1 B/S平台模式 2.1.2 MVC 2.1.3 Spring 2.1.4 Hibernate 2.1.5 Struts 2.2 前端介绍 2.2.1 JSP网页技术 2.3 开发工具 2.4 本章小结 前面内容请移步 基于java的CRM客户关系管理系统(二) 资源…

网络原理-TCP/IP --传输层(UDP)

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 目录 端口号UDP协议 端口号 我们在学习套接字的时候,涉及到两个概念:IP地址和端口号 IP地址是用来确定主机,这是网络层提供的概念 而端口号就是用来确定主机上的应用程序,就是传输层的概念的…

std::scoped_lock

scope--范围 当创建一个 std::scoped_lock 对象时,它尝试取得其所给互斥量的所有权,即上锁。当控制权离开创建 scoped_lock 对象的作用域时,scoped_lock 会被析构,互斥量随之被释放。 链接

代码随想录35期Day54-JavaScript

Day54题目 ### LeetCode739每日温度 核心思想:今天主要是学会单调栈的使用.找到比元素更大的下一个元素,如果比栈顶元素小就入栈,否则就出栈顶元素,当前元素就是比栈顶元素大的"下一个更大的元素". /*** param {number[]} temperatures* return {number[]}*/ var …

Linuxftp服务003虚拟用户登入

如果基于Vsftpd系统用户访问FTP服务器,系统用户越多越不利于管理,而且不利于系统安全管理,鉴于此,为了能更加的安全使用Vsftpd,需使用Vsftpd虚拟用户方式。 虚拟用户原理: 虚拟用户就是没有实际的真实系统…

CANDela studio新建和编辑服务

服务定义和编辑只能够在CDDT里面进行,思路分为三步: 1、Protocol Services里面添加服务,定义服务的格式、请求和正负响应。 2、根据服务的功能归类到Diagnostic Class Tenplates 3、Variant里面的Supported Diagnostic Classes勾选 然后我…

题目:回答结果(结构体变量传递)

题目:回答结果(结构体变量传递) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about …

【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录 题目:跑步 思路: 题目:夏日漫步 思路: 题目:糖果促销 思路: 题目:第五维度 思路: 题目:公园 思路: 新材料 思路: 星际航行 思路…

Ubuntu基础使用

快捷键: 命令行打开快捷方式:Ctrl Alt T Ctrl l 清屏 截屏: LinuxOS命令: 显示当前工作目录所有内容:ls (-a -l、-lh) -a 输入全部内容(包括隐藏文件) -l 竖向展示…

CompassArena 司南大模型测评--代码编写

测试角度 要说测试模型,对咱们程序员来说,那自然是写代码的能力强不强比较重要了。那么下面我们以 leetcode 中的一道表面上是困难题的题目来考考各家大模型,看看哪个才应该是咱们日常写程序的帮手。 部分模型回答 问题部分如下截图&#…

GUI与Web前端:深入剖析与比较

GUI与Web前端:深入剖析与比较 在数字化时代的浪潮下,图形用户界面(GUI)和Web前端作为人机交互的两大关键领域,各自承载着不同的功能与价值。本文将从四个方面、五个方面、六个方面和七个方面,对GUI和Web前…