Android 蓝牙通信开发(三) 蓝牙通信

基于QT的安卓手机蓝牙APP开发 最近做项目,需要开发安卓应用,实现串口的收发,目测CH340G在安卓手机上非常麻烦,而且驱动都是Java版本的, 就没选择,博主在大二的时候学习过Java SE基本的语法,写过一些小程序就放弃了Java的道路。最后选择了蓝牙无线透传模块,实现串口通信。现在Qt跨平台支持安卓,是在是令人欣喜。在网上找资料,用Qt on Android做蓝牙驱动的几乎没有,也没有相关例程,所以准备撰写此文,献给广大嵌入式程序员们。 一、软硬件平台 1.1 硬件平台 1、蓝牙:HC-05,(淘宝上有卖),它的接口就是跟串口一样的 阅读详情

蓝牙通信是我们日常生活中比较方便的一种通信技术,Android从2.0版本的SDK就开始支持蓝牙。对开发人员来说,应用程序中蓝牙还是一种用来创建点对点连接通信的简单而高效的方式。

蓝牙通信功能的实现的基本流程大致分为蓝牙设备搜索、蓝牙设备连接和蓝牙通信三个阶段,之前我们已经学习了前面两个阶段,今天把最后的蓝牙通信搞定!

Android模拟器还不支持蓝牙,因此要测试使用蓝牙功能,必须使用至少两台Android设备。

(1)基于I/O流的蓝牙通信

当两台蓝牙设备建立好连接之后,就可以进行数据传输了。蓝牙通信的数据传输方式是通过流形式进行的。而要获取传输流,就要使用到BluetoothSocket:BluetoothSocket.getInptuStream()[获取输入流]、BluetoothSocket.getOutputStream()[获取输出流]。

  • 写出数据(OutputStream)
private static final UUID UUID_CLIENT = UUID.fromString("2b21619a-e2d4-4108-aab5-b64c48906552");

BluetoothDevice device;     //连接的蓝牙设备
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID_CLIENT);
socket.connect();   //线程阻塞
OutputStream writer = socket.getOutputStream();     //获取蓝牙连接输出流
writer.write(("***").getBytes());   //发送"***"到服务器
  • 读入数据(InptuStream)
private static final UUID UUID_SERVER = UUID.fromString("2b21619a-e2d4-4108-aab5-b64c48906552");
private BluetoothAdapter bAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

    //...

    bAdapter = BluetoothAdapter.getDefaultAdapter();

    new ServerStart().start();  //开启蓝牙服务器
}

class ServerStart extends Thread {

        @Override
        public void run() {
            try {
                BluetoothServerSocket serverSocket = bAdapter.listenUsingRfcommWithServiceRecord("Server", UUID_SERVER);

                //服务器打开成功
                //...

                while (true) {
                    BluetoothSocket socket = serverSocket.accept();      //服务器等待客户端访问,线程阻塞

                    //客户端接入访问成功
                    //...

                    new ServerReceive(socket).start();          //进行蓝牙通信
                }

            } catch (Exception e) {

            }
        }
    }

class ServerReceive extends Thread {

    BluetoothSocket socket;

    public ServerReceive(BluetoothSocket s) {
        socket = s;
    }

    @Override
    public void run() {
        try {
            InputStream reader = socket.getInputStream();
            byte[] buffer = new byte[1024];
            while (true) {
                int n = reader.read(buffer);        //监听输入流
                //客户端发送数据
                if(n != -1) {
                    byte[] text = new byte[n];
                    for (int i = 0; i < n; i ++) {
                        text[i] = buffer[i];
                    }
                    String s = new String(text);    //接收到的数据

                    //判断断开条件,断开连接
                    if (***) {
                        socket.close();
                        break;
                    }
                }
            }
        } catch (Exception e) {

        }

    }
}

(2)运行结果

客户端和服务器端连接

服务器端接收到来自不同客户端的数据

客户端断开连接


BluetoothDemo下载

Android 蓝牙开发(一)蓝牙通信 随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了。 总结了下蓝牙开发使用的一些东西分享一下。 首先需要AndroidManifest.xml文件中添加操作蓝牙的权限。 <uses-permissionandroid:name="android.permission.BLUETOOTH" /> 允许程序连接到已配对的蓝牙设备。 <uses-permissionandro 阅读详情

相关推荐

Android基于Modbus RTU协议通过蓝牙与蓝牙串口开发板通信

Android基于ModbusRtu协议通过蓝牙与蓝牙串口通信实现开发板读写前言实现原理代码实现 前言 最近接到一位老师的项目,他们公司要求利用Android基于ModbusRtu协议通过蓝牙与蓝牙串口通信实现开发板读写,然后通过开发板控制硬件设备从而实现Android移动设备与硬件交互。所以今天我给大家分享下Android基于ModbusRtu协议的蓝牙通信。当然Android也可以直接通过串口利用ModbusRtu协议与开发板通信,或者基于Modbus TCP通信。至于非蓝牙非Modbus协议通信,大家

weixin_42644340的博客 7359

Android 蓝牙通信

Android 蓝牙通信一、现在的无线通信方案及差别二、蓝牙传输功能开发1、准备阶段1)权限2)蓝牙的开启/关闭/状态判断设备是支持蓝牙获取蓝牙状态启动/关闭2、查找设备1) 让设备可见2) 查找设备首先启动查找设备然后是通过广播来获取到查找的结果。3) 绑定设备对于已经绑定的设备对于未绑定的设备3、通讯过程通讯的两个设备蓝牙一定要绑定的吗?总结 一、现在的无线通信方案及差别 上图是2018年甚至是更老的时候的方案 除以上之外还有 红外线传输 但是红外线是直线的传输方式(单向传输?)不适应无线通讯 二、蓝

csdn_pun的博客 3316

Android 蓝牙通信及WiFi开发

在我们正常的Android蓝牙功能开发步骤中,一般要经过系统权限和蓝牙开关状态监测、设备扫描、设备连接、蓝牙数据通信这几个过程。 在Android 4.3系统之后,我们可以使用蓝牙4.0(低功耗蓝牙),它最主要的特点是低功耗,普及率高。现在所说的蓝牙设备,大部分都是在说4.0设备,ble也特指4.0设备。 在4.0之前重要的版本有2.1版本-基本速率/增强数据率(BR/EDR)和3.0 高速蓝牙版

Bug不知所起,一往而深。 5565

Android蓝牙通信

Android 平台包含蓝牙网络堆栈支持,此支持能让设备以无线方式与其他蓝牙设备交换数据。应用框架提供通过 Android Bluetooth API 访问蓝牙功能的权限。这些 API 允许应用以无线方式连接到其他蓝牙设备,从而实现点到点和多点无线功能。 使用蓝牙进行通信的四大必需任务:设置蓝牙、查找局部区域内的配对设备或可用设备、连接设备,以及在设备之间传输数据。 为了让支持蓝牙的设备能够在彼此之间传输数据,它们必须先通过配对过程形成通信通道。其中一台设备(可检测到的设备)需将自身设置为可接收传入的连接请

qq_51771271的博客 5063

基于Android的蓝牙聊天应用开发实战(BluetoothChat)

字段长度类型说明Length4int载荷长度Timestamp8long时间戳Type1byte消息类型(0=文本,1=心跳)PayloadNbyte[]实际内容打包函数:接收端先读13字节头部,再根据Length读取完整载荷,完美解决粘包问题。经过这一整套流程,你会发现:✅经典蓝牙仍然是实时通信的最佳选择✅。

weixin_42601702的博客 766

蓝牙通信 Android开发实现手机间通过蓝牙传输文件

通过Android开发实现手机间通过蓝牙传输文件 实验小作业,详细分析 安卓平台提供对蓝牙的通讯栈的支持,允许设备和其他的设备进行无线传输数据。应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接到蓝牙设备,并拥有P2P或者多端无线连接的特性。 蓝牙(Bluetooth)是一种短距离的无线通信技术标准。蓝牙协议分为4层,即核心协议层、电缆替代协议层、电话控制协议层和采纳的其它协议层。这4种协议中最重要的是核心协议。蓝牙的核心协议包括基带、链路管理、逻辑链路控制和适应协议四部分。其中链路管理(LMP)负责蓝牙组件间连接的建立。逻辑链路控制与适应协议(L2CAP)位于基带协议层上,属于数据链路层,是一个为高层传输和应用层协议屏蔽基带协议的适配协议。 1、扫描其他蓝牙设备 2、为可配对的蓝牙设备查询蓝牙适配器 3、建立RFCOMM通道(其实就是认证) 4、通过服务搜索来链接其他的设备 5、与其他的设备进行数据传输

安卓BLE蓝牙通讯

正常情况下,当触发触发onConnectSuccess回调时,设备已经连上的蓝牙的GATT,此时可认为蓝牙已连接,此时中心设备是无法和外围设备通讯的,还需根据蓝牙协议绑定指定的特征UUID,一般中心设备接收数据的为NOTIFY_CHARACTERISTIC_UUID,向外围设备发送消息的为WRITE_CHARACTERISTIC_UUID,大部分外设备还有描述符,例如接收数据需要的描述符NOTIFY_DESCRIPTOR_UUID等。断开设备后,进行重新扫描,再次连接时,可接收到Notify的消息。

weixin_41119184的博客 2831

迪文串口屏开发环境搭建全流程:从DGUS Tool到串口联调

串口屏作为嵌入式人机交互的核心组件,通过串口通信实现主控MCU与显示终端的指令交互。其工作原理基于变量地址映射,主控读写VP地址即可驱动屏上控件,兼具低功耗与高稳定性。在工业控制、医疗设备及智能家居面板等场景中,串口屏能显著降低开发门槛与硬件成本。迪文屏凭借DGUS Tool上位机与自定义串口协议,成为主流选择。掌握DGUS Tool版本匹配、串口驱动安装及VP地址规划,是快速搭建开发环境的关键。

weixin_33937499的博客 605

Android蓝牙开发(三)之蓝牙通信

上篇文章:https://blog.youkuaiyun.com/huangliniqng/article/details/82187966 上篇文章我们讲解了,蓝牙配对和蓝牙连接相关知识,还没有了解的朋友可先移步上篇文章。 1.蓝牙通信简介 无论是做Java还是Android开发的朋友肯定都比较熟悉Socket的连接,在java中通信用的是Socket,同样的蓝牙之间通信(这里说的是经典蓝牙)方式...

黄林晴 2万+

HX720数据采集实战:从硬件连接到姿态解析(含避坑指南)

本文详细介绍了HX720高精度ADC芯片在数据采集与姿态解析项目中的实战应用。内容涵盖从硬件电路设计、驱动源码编写与优化,到原始数据处理、校准以及最终姿态角度计算的完整流程,并提供了关键的避坑指南和调试技巧,帮助开发者高效完成从传感器信号到可用姿态数据的转换。

i8j9k0l1的博客 488

PaddleOCR GPU部署:从环境配置到避坑实战指南

本文详细介绍了PaddleOCR GPU部署的全过程,从环境配置到避坑实战指南。通过分析常见的部署失败原因,提供硬件兼容性自查、软件环境精配方案以及路径配置的解决方案,帮助用户高效完成GPU加速的OCR任务部署,避免90%的常见错误。

weixin_30839881的博客 418

Android开发之蓝牙通信(三)

接着上篇蓝牙通信往下写,若有不对还请指出,大家共同进步。Android开发之蓝牙通信(一)Android开发之蓝牙通信(二)前两篇提到了蓝牙开发的基本使用流程以及通信框架BluetoothKit,博主的蓝牙通信项目已经迭代了几个版本了,决定最后来做一个总结,主要是蓝牙通信协议相关,蓝牙通信一次限制传输字节大小,虽然蓝牙支持增量,但并不能保证成功率(可能硬件并没有增量),最好的解决办法就是切片,这里博

AnalyzeSystem的博客 1978

IGBT基础知识

IGBT

u010783226的专栏 1万+

【安卓可穿戴设备APP开发】BLE蓝牙、MySQL数据库、websocket网络通信的综合应用案例

本部分将详细介绍每个功能类的具体使用和功能实现,由于代码量较大,部分代码请参阅者自行对照源码查看~

weixin_45743645的博客 1169

CloudCompare点云滤波实战:三种植被去除技术的对比与应用

本文详细对比了CloudCompare中三种植被去除技术(低通滤波、CSF滤波和坡度法)的实战应用与效果。通过具体案例和参数优化建议,帮助用户根据地形特征选择最佳滤波方法,提升点云数据处理精度和效率,特别适用于复杂场景下的植被去除需求。

weixin_30689307的博客 84

【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速),滤波使用EKF。附完整代码

CV模型:状态包含位置、速度和零加速度(9维状态),状态转移矩阵忽略加速度项CA模型:完整包含位置、速度和加速度(9维状态),状态转移矩阵包含二次项过程噪声矩阵Q分别根据两种模型的运动特性推导。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 561

android 传统蓝牙开发(三):蓝牙设备连接及通信

蓝牙设备连接及通信 1.设备连接,服务器端开启线程一直等待连接,客户端点击某个目标设备,关闭服务器线程监听,并开启线程,发出连接请求。 注意:客户端连接前,一定cancelDiscovery() // 蓝牙已开启 if (bluetoothAdapter.isEnabled()) { showBondDevice(); // 默认开启服务线程监听 if (serverThre...

lumingzhang的博客 1610

【升级U8+】不能将值 NULL 插入列 ‘VT_ID‘,表 ‘VoucherItems‘;列不允许有 Null 值。

不能将值 NULL 插入列 ‘VT_ID’,表 ‘UFDATA_006_2012.dbo.VoucherItems’;列不允许有 Null 值。INSERT 失败。

努力不懈的为广大客户提供优质的产品与真诚、贴心、专业的服务! 515

android编译51单片机,GitHub - whaoming/SCMAndroidCommunicate: Android与51单片机的信息交互...

SCMAndroidCommunicateAndroid与51单片机的通信前言本篇文章将围绕App与单片机的蓝牙通信来说说lz最近进行开发的一些方案与思考此文分为三部分:单片机的PWM与串口通信Android的蓝牙开发单片机与Android App的通信方案预览视频观看:环境单片机单片机:STC89C52c语言编写环境:Keil uVision4烧录:stc-isp-15xx-v6.82Andro...

weixin_42493720的博客 718

EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区

以实际的从站EEPROM数据为例,参照EtherCAT的SII规范,详细分析了从站EEPROM字8-字15的产品标识区内容组成。

kevin1499的博客 718

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android 蓝牙开发详解与实战:基于 BluetoothChat 示例的完整解析

本文深入解析 Android SDK 中的经典蓝牙通信示例 BluetoothChat,从项目结构、核心代码到布局文件进行完整剖析。通过主界面 Activity、后台服务、设备列表、权限配置等模块的详细讲解,帮助开发者快速掌握 Android 蓝牙开发的核心流程与关键技术,实现设备间的稳定数据传输

xingfuyisheng的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android开发之蓝牙(二)——基于BLE协议蓝牙模块通信

介绍 基本概念 Android蓝牙开发流程 app是ble与spp选择连接蓝牙模块,关于spp的可以看 介绍摘要:蓝牙4.0——BLE是近年来应用比较广泛的profile,与传统蓝牙相比,其低功耗的特征最为显著,在蓝牙模块中(CC2540),一块纽扣电池可供电半年到一年之间。

zh1豪的博客 9538

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android蓝牙开发—经典蓝牙详细开发流程

       Android蓝牙开发前,首先要区分是经典蓝牙开发还是BLE(低功耗)蓝牙开发,它们的开发是有区别的,如果还分不清经典蓝牙和BLE(低功耗)蓝牙的小伙伴,可以先看Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别 本文是针对经典蓝牙开发的,如果是BLE(低功耗)蓝牙开发,可以看Android蓝牙开发—BLE(低功耗)蓝牙详细开发流程 开发流程 开启蓝牙 扫描蓝牙 ...

zqf_888的博客 5万+

Android 蓝牙开发之搜索、配对、连接、通信大全

蓝牙( Bluetooth®):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙设备最多可以同时和7个其它蓝牙设备建立连接,进行通信,当然并不是每一个蓝牙都可以达到最大值。下面,我们从蓝牙的基本概念开始,一步一步开始了解蓝牙。(尊重劳动成果,转载请注明出处http://blog....

weixin_33686714的博客 5972
上一篇: Android 蓝牙通信开发(二) 创建蓝牙连接
下一篇: Oracle 设置主键自增长
magic__Coder
博客等级 码龄11年 41粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值