精华内容
下载资源
问答
  • Android蓝牙开发SPP协议通信
    2021-06-05 17:36:49

    最近项目中使用到蓝牙SPP协议通信,然后在网上看了很多资料,进行学习使用,为了加深印象,做个简单的整理。

    1、使用蓝牙权限< uses-permission android:name="android.permission.BLUETOOTH" />

    < uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    2、蓝牙核心类BluetoothAdapter

    代表本地的蓝牙适配器设备。BluetoothAdapter类让用户能执行基本的蓝牙任务。例如:初始化设备的搜索,查询可匹配的设备集,使用一个已知的MAC地址来初始化一个BluetoothDevice类,创建一个 BluetoothServerSocket类以监听其它设备对本机的连接请求等。

    为了得到这个代表本地蓝牙适配器的 BluetoothAdapter类,调用getDefaultAdapter()这一静态方法。这是所有蓝牙动作使用的第一步。当拥有本地适配器以后,用户可以获得一系列的BluetoothDevice对象,这些对象代表所有拥有getBondedDevice()方法的已经匹配的设备;用 startDiscovery()方法来开始设备的搜寻;或者创建一个BluetoothServerSocket类,通过 listenUsingRfcommWithServiceRecord(String, UUID)方法来监听新来的连接请求。

    打开系统的蓝牙设置面板

    Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

    startActivity(intent);

    开启蓝牙

    adapter.enable();

    关闭蓝牙

    adapter.disable();

    设置对别的设备可见

    Intent discoveryIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

    discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);//设置持续时间(最多300秒)

    搜索蓝牙

    adapter.startDiacovery(),当在代码中调用了该方法时,系统会发送广播ACTION_FOUND:找到设备,我们可以在代码中注册一个广播,用来接受系统发送的广播。

    // 注册BroadcastReceiver

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

    registerReceiver(mReceiver, filter); // 不要忘了之后解除绑定

    // 创建一个接收ACTION_FOUND广播的BroadcastReceiver

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();

    // 发现设备

    if (BluetoothDevice.ACTION_FOUND.equals(action)) {

    // 从Intent中获取设备对象

    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

    // 将设备名称和地址放入array adapter,以便在ListView中显示

    mArrayAdapter.add(device.getName() + "\n" + device.getAddress());

    }

    }

    };

    

    更多相关内容
  • 蓝牙SPP协议学习记录

    2022-03-03 00:06:27
    SPP的链路依赖关系 从RF到用户层 基带 -> HCI -> L2CAP -> SDP -> RFCOMM -> SPP SPP链路建立 14.5.1 Establish link and set up virtual serial connection. This procedure refers to ...

    SPP的链路依赖关系

    从RF到用户层

    基带 -> HCI -> L2CAP -> SDP -> RFCOMM -> SPP

    SPP链路建立

     

    14.5.1 Establish link and set up virtual serial connection. This procedure refers to performing the steps necessary to establish a connection to an emulated serial port (or equivalent) in a remote device. The steps in this procedure are:
    1) Submit a query using SDP to find out the RFCOMM Server channel number of the desired application in the remote device. This might include a browsing capability to let the user select among available ports (or services) in the peer device.【选择SPP对应的通道以及SPP的UUID】Alternatively, if it is known exactly which service to contact, it is sufficient look up the necessary parameters using the Service Class ID associated with the desired service.
    2) Optionally, require authentication of the remote device to be performed. Also optionally, require encryption to be turned on.
    3) Request a new L2CAP channel to the remote RFCOMM entity.【SPP的链路依赖于L2CAP链路】
    4) Initiate an RFCOMM session on the L2CAP channel.
    5) Start a new data link connection on the RFCOMM session, using the aforementioned server channel number.
    After step 5, the virtual serial cable connection is ready to be used for communication between applications on both sides.

    SPP链路鉴权

    14.5.2 Accept link and establish virtual serial connection.
    This procedure refers to taking part in the following steps:
    1) If requested by the remote device, take part in authentication procedure and, upon further request, turn on encryption.【当远端设备发起连接请求,将执行鉴权动作】
    2) Accept a new channel establishment indication from L2CAP.
    3) Accept an RFCOMM session establishment on that channel.
    4) Accept a new data link connection on the RFCOMM session. This may trigger a local request to authenticate the remote device and turn on encryption, if the user has required that for the emulated serial port being connected to (and authentication/encryption procedures have not already been carried out).
    14.5.3 Register Service record for application in local SDP database.
    This procedure refers to registration of a service record for an emulated serial port (or equivalent) in the SDP database. This implies the existence of a Service Database, and the ability to respond to SDP queries.
     

    展开全文
  • 蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输2.SPP的UUID:00001101-0000-1000-8000-00805F9B34FB3.Android手机一般以客户端的角色主动连接SPP协议设备连接流程1.检测蓝牙...

    准备

    1.蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输

    2.SPP的UUID:00001101-0000-1000-8000-00805F9B34FB

    3.Android手机一般以客户端的角色主动连接SPP协议设备

    连接流程

    1.检测蓝牙状态

    若蓝牙未打开,则打开蓝牙~

    bluetoothAdapter =BluetoothAdapter.getDefaultAdapter();

    @Overrideprotected voidonResume() {super.onResume();if (!bluetoothAdapter.isEnabled()) {//open blueTooth

    Intent enableBtIntent = newIntent( BluetoothAdapter.ACTION_REQUEST_ENABLE);

    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

    }

    }

    @Overrideprotected void onActivityResult(int requestCode, intresultCode, Intent data) {if (requestCode == REQUEST_ENABLE_BT && resultCode ==Activity.RESULT_CANCELED) {

    finish();return;

    }

    }

    2.注册设备搜索广播信息

    使用registerReceiver注册broadcastReceiver来获取搜索设备等消息

    IntentFilter intentFilter = newIntentFilter();

    intentFilter.addAction(BluetoothDevice.ACTION_FOUND);

    intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

    registerReceiver(receiver, intentFilter);//receiver

    private final BroadcastReceiver receiver = newBroadcastReceiver(){

    @Overridepublic voidonReceive(Context context, Intent intent) {

    String action=intent.getAction();if(BluetoothDevice.ACTION_FOUND.equals(action)) {//find a device

    BluetoothDevice device =intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (device.getBondState() !=BluetoothDevice.BOND_BONDED) {//未配对设备

    newDeviceArrayAdapter.add(device.getName() + "

    " +device.getAddress());

    }else{//已经配对过的设备

    TextView tvPaired =(TextView)findViewById(R.id.tv_paired);

    tvPaired.setVisibility(View.VISIBLE);

    lvPairedDevices.setVisibility(View.VISIBLE);

    pairedDeviceArrayAdapter.add(device.getName()+ "

    " +device.getAddress());

    }

    Log.i(TAG,"name:" + device.getName() + " address"+device.getAddress());

    }else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action){//search finish

    Log.i(TAG, "search finish!");

    }

    }

    };

    3.使用BlueAdatper搜索

    使用bluetoothAdapter搜索设备,bluetoothAdapter.startDiscovery()在搜索过程中,系统会发出三个广播信息:

    ACTION_DISCOVERY_START:开始搜索

    ACTION_DISCOVERY_FINISHED:搜索结束

    ACTION_FOUND:找到设备

    @Overridepublic voidonClick(View v) {if(bluetoothAdapter.isDiscovering()) {

    bluetoothAdapter.cancelDiscovery();

    }

    bluetoothAdapter.startDiscovery();

    }

    4.获取搜索到的蓝牙设备信息

    在BroadcastReceiver的onReceive()里取得搜索到的蓝牙设备信息(如名称,MAC,RSSI)

    5.通过蓝牙设备的MAC地址来建立一个BluetoothDevice对象:

    BluetoothDevice romoteDevice = bluetoothAdapter.getRemoteDevice(mDeviceAddress);

    6.由BluetoothDevice衍生BluetoothSocket

    通过BluetoothSocket的createRfcommSocketToServiceRecord()方法来选择连接的协议/服务,这里用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB)

    try{

    bluetoothSocket=romoteDevice.createRfcommSocketToServiceRecord(UUID.fromString(SPP_UUID));

    }catch(IOException e) {

    e.printStackTrace();

    Toast.makeText(this, "socket init failed", Toast.LENGTH_SHORT).show();

    }

    7.使用BluetoothSocket来连接、读写蓝牙设备

    读写可以归到一个独立线程去实现~

    try{

    bluetoothSocket.connect();

    Toast.makeText(this, "connect success", Toast.LENGTH_SHORT).show();

    }catch(IOException e2) {

    e2.printStackTrace();

    Toast.makeText(this, "connect failed", Toast.LENGTH_SHORT).show();try{

    bluetoothSocket.close();

    bluetoothSocket= null;

    }catch(IOException e) {

    e.printStackTrace();

    Toast.makeText(this, "socket close failed", Toast.LENGTH_SHORT).show();

    }return;

    }try{

    inputStream=bluetoothSocket.getInputStream();

    }catch(IOException e2) {

    e2.printStackTrace();

    Toast.makeText(this, "get inputstream failed", Toast.LENGTH_SHORT).show();return;

    }try{

    OutputStream os=bluetoothSocket.getOutputStream();byte[] osBytes =etInput.getText().toString().getBytes();for (int i = 0; i < osBytes.length; i++) {if (osBytes[i] == 0x0a)

    n++;

    }byte[] osBytesNew = new byte[osBytes.length+n];

    n= 0;for (int i = 0; i < osBytesNew.length; i++) {//mobile "

    "is 0a,modify 0d 0a then send

    if (osBytesNew[i] == 0x0a) {

    osBytesNew[n]= 0x0d;

    n++;

    osBytesNew[n]= 0x0a;

    }else{

    osBytesNew[n]=osBytes[i];

    }

    n++;

    }

    os.write(osBytesNew);

    }catch(Exception e) {

    e.printStackTrace();

    }

    展开全文
  • 蓝牙SPP协议

    热门讨论 2008-04-18 21:38:47
    全面系统介绍蓝牙SPP协议的内容,对开发和应用SPP协议的研究人员大有帮助!
  • 实现android与蓝牙SPP协议的读写通信.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 蓝牙SPP协议V1.2

    2015-06-15 14:14:08
    蓝牙SPP协议V1.2,官方文档,非常详细,共20页
  • Android-BluetoothSPPLibrary蓝牙SPP协议通信库.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • android 蓝牙 spp协议

    千次阅读 2016-06-12 17:25:40
  • 主要介绍下蓝牙协议栈 串口协议(bluetooth SPP)Serial Port Profile 协议概念介绍。 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些...
  • 本文章主要讲下蓝牙串口协议SPP(Serial Port Profile)连接/接受数据/发送数据/断开连接的流程介绍,可能之前的写的底层文章你看的云里雾里,此小节就是开发从应用Profile层面来把整个地方串起来,让你们对协议栈有...
  • 任务:用android编程实现手机通过蓝牙SPP协议同时连接2个蓝牙设备A、B并同时读取A、B的数据。 我实现的方法:2个蓝牙设备A、B都是SPP server,手机是SPP client。 结果:可以把手机只配对连接A或B,读取数据。如果把...
  • 用户可以通过串口和SPP-CA芯片进行通信,串口使用Tx,Rx两根信号线,波特率支持2400,4800,9600,14400,19200,38400,57600,115200,230400,460800和921600bps串口缺省波特率为9600bps。
  • Android蓝牙连接之SPP协议

    万次阅读 2017-04-23 17:49:32
    蓝牙协议分为两种,SPP协议和BLE(Bluetooth low energy),Android4.3以上加入了低功耗蓝牙即BLE蓝牙协议,本篇文章我主要介绍下spp蓝牙协议的一些特性(BLE协议后期会陆续更新)。 比如我们需要实现一个如下图这样...
  • Android 蓝牙SPP通信——简介

    千次阅读 2020-07-08 14:52:53
    在这就不对SPP协议进行深入探讨技术细节,而是对于SPP通信进行一个大体描述,建立一个整体框架模型,总结如下几点。 蓝牙协议众多,SPP只是其中一种; SPP通信属于典型的C/S模式,那么建立通信的双方就分为服务端...
  • 使用设备 基本概念 基本流程本文意在介绍蓝牙开发的主要流程,学习使用蓝牙...下一篇文章还有Android开发之蓝牙(二)——基于BLE协议蓝牙模块通信: http://blog.csdn.net/wzhworld/article/details/76324738使用设
  • android 蓝牙SPP传输demo

    2021-06-07 00:44:03
    【实例简介】android 蓝牙SPP传输demo(代码),可以调用android蓝牙SPP数据,接口设置等【实例截图】【核心代码】androidbluetoothspp└── android bluetooth spp└── BluetoothChat├── AndroidManifest.xml├...
  • 我有一个相当简单的程序,主要基于这里发布的简单蓝牙测试客户端应用程序:我的应用程序有4个按钮,每个按钮通过蓝牙连接发送不同的数据字节。似乎工作得很好几秒钟。建立连接,RFCOMM插座连接,并在最初几秒内通过...
  • BM4342 模块是一款符合蓝牙标准的蓝牙产品,单模双协议, 基于BK方案开发的.目前支持的协议包括 BR/SPP/HID, 支持 UART 通信( 流控功能可定制),主要应用于IOT、无线扫描枪、无线测量监控、医疗、蓝牙POS机.
  • 环境: HI3559/3519 内核:4.9.37 蓝牙芯片:USB 8723bu 1.驱动添加 8723bu驱动。...内核:蓝牙相关功能打开、蓝牙USB支持。 2.bluez编译 Bluez编译资源列表: drwxr-xr-x 23 hi3559av100.
  • 传统蓝牙SDP协议详细介绍

    千次阅读 2020-08-20 08:38:18
    第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等 第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层...
  • 主要介绍下蓝牙协议栈开发板跑传统蓝牙串口协议SPP AT指令以及上位机操作步骤,以及原理 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些...
  • 蓝牙打印机使用的协议 SPP

    热门讨论 2012-03-15 13:12:23
    蓝牙热敏打印机所使用的蓝牙协议文档,SPP
  • 蓝牙串口(spp)win10(pc)版本

    千次阅读 2020-05-21 10:19:44
    蓝牙串口调试pc版本spp协议1.前提条件2.准备工作3.开始调试 1.前提条件 pc系统是win10的,那么调试蓝牙的前提是电脑需要有蓝牙。如何查看自己的电脑是否有蓝牙设备呢? 所以,可以看到电脑上是由蓝牙设备的。 2....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,528
精华内容 611
关键字:

蓝牙spp协议

友情链接: LCDClock.zip