Android实现SPP核心代码

AndroidStudio经典蓝牙协议SPP通信 2、connectToDevice方法中判断手机是否打开蓝牙,若无则请求用户允许打开,用户处理结果在onActivityResult方法中响应;蓝牙打开后,还需判断是否授予应用蓝牙权限,若无则请求用户允许授予,用户处理结果在onRequestPermissionsResult方法中响应。4、connectToDeviceUnderpermission方法中先通过设备MAC地址获取设备,若未知设备SPP服务特性则可通过设备getUuids方法获取;点击按钮后调用connectToDevice方法。 阅读详情
Android使用的是bluez开源蓝牙协议栈,bluez是C的,通过JNI(JAVA的Native调用),把底层C接口封装为JAVA接口。所以,android蓝牙开发即可以使用android SDK提供的java的API接口,也可以直接native调用bluez底层的C接口或者android封装的非sdk的java接口。但后者有一个风险,就是android不同版本使用的bluez版本不同,封装的接口也不同,造成版本的适配性很差。所以,最好是基于android的sdk提供的api开发。
    android的sdk基于RFCOMM封装了bluetoothsocket,使得对rfcomm的访问比较简单,和tcp的socket类似。

    下面简单介绍下Android实现SPP主、从机的主要代码。
    可以同时实现SPP主从机,当然需要不同的线程,因为有的方法是阻塞的。

1、实现SPP的服务端,即SPP主机。实现后,处于SPP的监听状态,等待从机连接。
    连接后,就可以值机使用inputstream和outputstream进行数据传输了。
private class SppServer extends Thread {  //监听方法是阻塞方法,所以需要单独线程
    public SppServer() {
              try {
                btServerSocket = btAdapt.listenUsingRfcommWithServiceRecord("SPP", spp_uuid); 
                         //SPP_UUID="00001101-0000-1000-8000-00805F9B34FB"
        } catch (IOException e) {
                        e.printStackTrace();
                }
        }

        public void run() {
                btAdapt.cancelDiscovery();  //退出搜索
                try {
                        bs = btServerSocket.accept();  //BluetoothSocket bs = null; 此方法为阻塞方法,有连接进来后返回。
                        synchronized (Spp.this) {
                                if (sppConnected) return;        //如果已经连接,则返回。
                                btIn = bs.getInputStream();          //InputStream btIn;
                                btOut = bs.getOutputStream();          //OutputStream btOut;
                                ....  //此时SPP已经连接,可以通过btout/btin收发消息了。        
                                }
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
        }

        public void cancel() {
        //退出时的操作
        }

2、实现SPP从机。
    相对简单,就是发起连接即可。
   public void sppConnect(){
            if (btAdapt.isDiscovering()) {
                    btAdapt.cancelDiscovery();
            }; 
            try {
                btSocket = btAdapt.getRemoteDevice(sCurdev)
                                        .createRfcommSocketToServiceRecord(spp_uuid);
                btSocket.connect();
                synchronized (Spp.this) {
                        if(btServerSocket!=null) btServerSocket.close();  //关闭之前可能保持的socket
                        btIn = btSocket.getInputStream();
                        btOut = btSocket.getOutputStream();
                        .......//需另起一个线程接收消息,同样因为阻塞。
                        }
                } catch (IOException e) {
                // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                        }
                }
    }

    大家可以发现,确切来说,android实现SPP实际上绝大部分工作是底层完成的。在RFCOMM启动SPP监听时,底层的SDP服务注册、端口协商等在SPP Profile中定义的动作,android已经替我们完成了。所以,android实现SPP其实很简单。
ESP32经典蓝牙SPP实战:手把手教你用安卓手机实现无线串口通信(附完整代码) 本文详细介绍了如何使用ESP32经典蓝牙SPP协议实现与安卓手机的无线串口通信,包括硬件准备、开发环境配置、核心代码实现及安卓端应用开发。通过SPP协议,开发者可以轻松实现高速、稳定的无线数据传输,适用于工业调试、智能家居等多种场景。附完整代码和性能优化技巧,助您快速上手ESP32蓝牙开发。 阅读详情

相关推荐

基于蓝牙SPP实现Edison与安卓稳定通信的完整实践指南

串行端口配置(SPP)是蓝牙经典协议中的一项核心服务,它通过在蓝牙射频层之上模拟传统RS-232串行通信接口,为设备间提供了可靠的双向数据通道。其技术原理基于RFCOMM协议,允许应用程序像操作物理串口一样进行数据读写,从而屏蔽了底层无线通信的复杂性。在物联网和嵌入式开发领域,SPP的价值在于能够实现设备与移动终端间的直连通信,无需依赖外部网络,具有低功耗、低延迟和连接稳定的特点。这一技术广泛应用于智能家居传感器数据回传、可穿戴设备数据同步、移动机器人遥控以及工业现场数据采集等场景。本文以Intel Edi

weixin_33834910的博客 487

android蓝牙SPP协议以及BluetoothSocket/BluetoothServerSocket的简单使用

今天讲解一下android蓝牙SPP协议(Serial Port Profile),这是一个数据交换的协议,用于蓝牙设备之间创建串口进行数据传输。假设没有异常出现,一般都能正常连接成功,在拿到socket之后便可以进行数据交换了,于是便获取流就可以进行流的读写了。:蓝牙设备封装类,描述一台设备的MAC地址,名称等数据,在与服务端建立通讯的过程中,利用此类的。在上述监听代码中,我们将监听过程放到了一个子线程里,因为。还有一点需要注意的是,:蓝牙适配器类,利用此类,利用。:蓝牙适配器类,利用此类的。

DamonMasty的博客 2946

Android 蓝牙 SPP串口协议 rfcomm 流控以及credit配置

Android 蓝牙 rfcomm spp 协议连接流程、数据收发流程源码分析大全 android-蓝牙A2dp-avrcp-hfp-opp-配对流程-ble-rfcomm源码流程 一、概述 SPP协议(SerialPortProfile)定义了使用蓝牙进行RS232(或类似)串行电缆仿真的设备应使用的协议和过程。简单来说就是在蓝牙设备之间建立虚拟的串口进行数据通信,两个设备可以向对端发送自定义数据。SPP只有安卓手机支持,iphone手机不支持SPP协议。 二、协议架构 2......

手机-手表蓝牙开发工程师的博客 2336

蓝牙 SPP 协议详解及 Android 实现

蓝牙 SPP(Serial Port Profile,串口通信协议)是一种经典蓝牙协议,它允许设备之间通过模拟串口的方式进行无线数据传输。基于 RFCOMM 通信层,SPP 协议与传统的 RS-232 串口标准类似,因此非常适合低速、短距离的数据传输,如 Android 设备和传感器、微控制器之间的通信。本文将详细介绍蓝牙 SPP 协议的原理、工作流程,并结合 Android 实现,展示如何在移动设备中应用该协议。SPP 是一种点对点的蓝牙通信协议,适合小数据量的双向传输。

weixin_44780781的博客 7255

Android蓝牙SPP通信实现与应用

蓝牙串行端口协议(SPP)是一种广泛使用的蓝牙通信协议,它模拟了串行通信端口,允许两台设备通过蓝牙进行虚拟的串行端口通信。SPP协议因其简单性、可靠性以及广泛的支持在嵌入式系统、手机应用、医疗设备和其他领域中被广泛采纳。本章将详细探讨蓝牙SPP协议的基础知识,并着重讲解其在现代通信系统中的重要性及其技术优势。

weixin_28850145的博客 1640

Android蓝牙开发入门程序代码实战

蓝牙技术作为短距离无线通信的重要手段,在Android平台上被广泛应用于设备间的数据传输和通信。本章将从蓝牙技术的基本概念入手,介绍蓝牙协议栈、蓝牙版本演进及其在Android系统中的实现机制。通过了解蓝牙在Android中的架构层级,为后续章节中蓝牙开发的具体实现打下理论基础。Android系统通过Bluetooth API封装了底层协议栈(如HCI、L2CAP、RFCOMM等),使得开发者可以便捷地实现设备发现、配对、连接和数据传输等功能。

weixin_42402664的博客 1144

前端:Android Studio:Java开发简化SPP蓝牙app(已知蓝牙mac地址,仅实现数据交互功能)

注:代码放在小结。完整实现约需150-200行核心代码,重点注意:线程安全、连接稳定性、权限兼容性三大核心问题。

lt1037400649的博客 558

ESP32智能音箱蓝牙通信实战:从SPP到BLE的完整指南

蓝牙通信是物联网设备与手机交互的核心技术之一,广泛应用于智能硬件、可穿戴设备和智能家居场景。在嵌入式开发中,ESP32作为主流低功耗方案,同时支持经典蓝牙SPP与BLE(低功耗蓝牙)两种模式,开发者需理解SPP的串口透传特性与BLE的GATT服务模型,才能根据实际需求选择合适的通信链路。BLE凭借低功耗和跨平台兼容性,成为智能音箱、智能灯等设备控制通道的首选。本文以智能音箱蓝牙通信为例,详细讲解基于ESP32的经典蓝牙SPP快速验证与BLE GATT服务实现,涵盖指令解析、数据回传、MTU优化及手机联调技巧

weixin_29175469的博客 302

SimpleBluetoothTerminal 开源项目教程

SimpleBluetoothTerminal 是一个 Android 应用程序,它为经典蓝牙设备提供了一个面向行的终端/控制台,使用蓝牙串行端口配置文件(SPP)。该项目在 GitHub 上开源,由 kai-morich 维护。该应用允许用户通过蓝牙与设备进行通信,适用于需要蓝牙通信的各种场景。 ## 项目快速启动 ### 环境准备 1. 安装 Android Studio。 2. 克隆项

gitblog_00372的博客 1277

Android蓝牙SPP通信实践:源代码解析

SPP(Serial Port Profile)是蓝牙技术中用于串行通信的一个协议,它允许两个蓝牙设备之间建立类似于串口的连接,进行数据的发送和接收。SPP协议广泛应用于需要无线通信的各种设备中,尤其在Android平台上,通过蓝牙API可轻松实现SPP设备之间的通信。

weixin_36235398的博客 1284

Android蓝牙开发实战:BLE与SPP连接详解

蓝牙技术作为现代移动设备中不可或缺的无线通信方式,尤其在Android平台上,广泛应用于耳机、手环、智能家居等外设的连接与数据交互。Android系统从2.0开始逐步完善蓝牙API,到如今已支持经典蓝牙(SPP)和低功耗蓝牙(BLE)两种主流协议。本章将引导读者了解蓝牙的基本概念,掌握SPP与BLE的核心区别,并熟悉Android蓝牙开发的整体架构与环境搭建流程,为后续深入开发打下坚实基础。定义数据包格式如下:字段长度含义起始标志1字节固定值 0xAA命令字。

weixin_35294091的博客 1347

android spp协议,Android蓝牙开发SPP协议通信

最近项目中使用到蓝牙SPP协议通信,然后在网上看了很多资料,进行学习使用,为了加深印象,做个简单的整理。1、使用蓝牙权限< uses-permission android:name="android.permission.BLUETOOTH" />< uses-permission android:name="android.permission.BLUETOOTH_ADMIN"...

weixin_39966922的博客 817

android 蓝牙SPP传输demo

android 蓝牙SPP传输demo(代码),可以调用android蓝牙SPP数据,接口设置等

android蓝牙SPP传输demo:让数据传输更高效

android蓝牙SPP传输demo:让数据传输更高效 【下载地址】android蓝牙SPP传输demo 探索Android蓝牙SPP数据传输的奥秘,这个开源项目为你提供了一个实用的demo。它涵盖了蓝牙接口的设置与调用,让你轻松掌握数据传输的关键技术。无论是初学者还是经验丰富的开发者,都能通过这个项目深入理解Andro...

gitblog_06774的博客 1016

MDT部署实战:除了Office,这些“装机必备”软件也能一键静默安装(含静默参数)

本文详细介绍了如何利用Microsoft Deployment Toolkit(MDT)实现企业级软件的静默安装,包括浏览器、开发工具和系统增强工具等“装机必备”软件的部署方案。通过命令行参数和MSI属性,IT运维团队可以高效构建标准化工作环境,提升部署效率并确保版本一致性。文章还提供了安装顺序控制、结果验证和常见问题排错等高级技巧。

weixin_26985923的博客 172

ROS新手必看:5分钟搞定URDF小车建模(附Rviz可视化调试技巧)

本文为ROS新手提供了快速构建URDF机器人模型的实战指南。通过一个完整的两轮差速小车建模案例,详细解析了URDF的核心语法、Rviz可视化调试技巧以及常见问题排查方法,帮助初学者快速掌握ROS机器人建模与可视化调试的核心技能。

weixin_29079643的博客 250

Android蓝牙开发SPP协议通信

最近项目中使用到蓝牙SPP协议通信,然后在网上看了很多资料,进行学习使用,为了加深印象,做个简单的整理。 1、使用蓝牙权限     2、蓝牙核心类BluetoothAdapter      代表本地的蓝牙适配器设备。BluetoothAdapter类让用户能执行基本的蓝牙任务。例如: 初始化设备的搜索,查询可匹配的设备集,使用一个已知的MAC地址来初始化一个Bluetoot

yangshuangyue的博客 1万+

CXL ALMP(ARB/MUX Link Management Packet)理解

ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。ALMP是ARB/MUX层的控制平面报文,专用于以下场景:协调多协议(CXL.io、CXL.cachemem等)的链路状态切换(如L1进入/退出)。维护各协议独立的虚拟链路状态机(vLSM) 状态同步。在物理层(PHY)与链路层(Link Layer)之间仲裁电源管理请求。

Summer的博客 1198

【移动端Android 蓝牙】经典蓝牙配对与连接 SPP规范架构+唯一标识符UUID+RFCOMM端口号+Android代码实现

【移动端Android 蓝牙】经典蓝牙配对与连接 SPP规范架构+唯一标识符UUID+RFCOMM端口号+Android代码实现

ResumeProject的博客 1562

Win10/Win11系统下冒险岛V128单机版一键搭建教程(含MySQL配置避坑指南)

本文提供Win10/Win11系统下冒险岛V128单机版一键搭建的详细教程,涵盖服务端部署、MySQL配置优化及常见问题解决方案。通过本指南,玩家可轻松实现单机版冒险岛的一键启动,重温经典游戏体验,同时避免常见的技术陷阱。

weixin_29261711的博客 651

esp32 python开发环境搭建_eclipse esp32开发环境搭建

安装方法基本是按照官网提供的方法来操作https://github.com/espressif/idf-eclipse-plugin#GettingStarted但是官网的方法安装之后还是不能编译成功的,第一次编译会出现一下问题问题1:Building in: E:\eclipse-workspace\helloworlk\buildcmake -G Ninja -DCMAKE_TOOLCHAIN...

weixin_39978276的博客 1263

杰理蓝牙耳机开发 -- SPP功能开发与应用

蓝牙SPP(Serial Port Profile,串行端口协议)是一种蓝牙协议,本篇文章简单介绍杰理SDK中SPP的使用方法,梳理SPP功能的开发流程。

ccdehuiji的博客 1481

图神经网络学习笔记-点云数据处理(专题七)

本教程解释了如何利用图神经网络(Graph Neural Networks,GNNs)来处理和训练点云数据。尽管点云默认情况下不具有图结构,但我们可以利用 PyG 的转换工具,将其转化为适合 PyG 所提供的全套 GNN 模型的形式。关键思想是从点云数据中创建一个,通过 GNN 的消息传递机制,从中学习有意义的局部几何结构。这些点的表示可以被用于例如点云分类或分割等任务。

351
上一篇: android蓝牙耳机录音程序主要代码
下一篇: android获取SN/IMEI号码
ysfeagle
博客等级 码龄19年 18粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值