今天讲解一下android蓝牙SPP协议(Serial Port Profile),这是一个数据交换的协议,用于蓝牙设备之间创建串口进行数据传输
androd上层应用中,可以通过BluetoothSocket跟BluetoothServerSocket类来建立串口通讯,打开输入或者输出流并从流中获取或者发送数据。此过程便是android基于蓝牙SPP协议能力来完成的

下面一起来看下客户端设计的重要类以及方法:
BluetoothAdapter:蓝牙适配器类,利用此类,利用getRemoteDevice()方法来获取远程蓝牙设备`
BluetoothDevice:蓝牙设备封装类,描述一台设备的MAC地址,名称等数据,在与服务端建立通讯的过程中,利用此类的createRfcommSocketToServiceRecord()方法来获取客户端蓝牙socket
另外的,服务端用到的重要类以及方法:
BluetoothAdapter:蓝牙适配器类,利用此类的listenUsingRfcommWithServiceRecord方法来获取一个BluetoothServerSocket,一个监听socket请求的服务端socket
BluetoothServerSocket:负责监听其它设备的socket连接请求
讲解完常见的类,接下来看下开发步骤,首先我们从服务端开始:
服务端首先利用BluetoothAdapter来获取服务端的蓝牙socket,即BluetoothServerSocket

   private void accept() {new Thread() {@Overridepublic void run() {try {synchronized (BluetoothStateViewModel.class) {BluetoothServerSocket serverSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord("123", UUID.fromString(UUIDString));mSocket = serverSocket.accept(); // 会阻塞线程,建议在子线程中进行}} catch (IOException e) {e.printStackTrace();}}}.start();}

在上述监听代码中,我们将监听过程放到了一个子线程里,因为accept()方法会阻塞当前线程。还有一点需要注意的是, listenUsingRfcommWithServiceRecord方法的第二个参数UUID类型,需要与客户端用的的保持一致。

为了让accept方法能够长时间的运行,我们可以做一个循环判断处理(当然是开启另外一个线程),例如:

new Thread(new Runnable() {@Overridepublic void run() {while (mSocket == null) {accept();try {Thread.sleep(1000);//循环间隔为1秒,条件是mSocket为空} catch (InterruptedException e) {throw new RuntimeException(e);}}}}).start();

上述是服务端运行监听代码,接下来看一下客户端的代码:

//通过MAC地址获取远程设备
BluetoothDevice targetDevice = bluetoothAdapter.getRemoteDevice("40:44:FD:A5:B3:22");
//通过与服务端保持一致的uuid来创建射频socket
new Thread(new Runnable() {@Overridepublic void run() {try {BluetoothSocket bluetoothSocket = chatDevice.createRfcommSocketToServiceRecord(UUID.fromString(UUIDString));bluetoothSocket.connect();mSocket = bluetoothSocket;} catch (Exception e) {e.printStackTrace();}}}).start();

假设没有异常出现,一般都能正常连接成功,在拿到socket之后便可以进行数据交换了,于是便获取流就可以进行流的读写了。:

InputStream inputStream = mSocket.getInputStream();
OutputStream outputStream = mSocket.getOutputStream();

以上就是蓝牙SPP协议以及BluetoothSocket/BluetoothServerSocket的简单使用,谢谢阅读

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

  1. android中的蓝牙通信协议,android 蓝牙SPP协议通信

    准备 1.蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输 2.SPP的UUID:00001101-0000-1000-8000-00805F ...

  2. spp协议 android,android 蓝牙SPP协议通信

    准备 1.蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输 2.SPP的UUID:00001101-0000-1000-8000-00805F ...

  3. Android 蓝牙SPP通信——简介

    在这就不对SPP协议进行深入探讨技术细节,而是对于SPP通信进行一个大体描述,建立一个整体框架模型,总结如下几点. 蓝牙协议众多,SPP只是其中一种: SPP通信属于典型的C/S模式,那么建立通信的双 ...

  4. Android 蓝牙hfp协议连接slc连接rfcomm连接源码分析(2)- HF侧发送和接受数据流程

    android-蓝牙A2dp-avrcp-hfp-opp-配对流程-ble-rfcomm源码流程 Android 蓝牙hfp初始化.rfcomm连接.slc连接.sco连接源代码分析大全 - 点击下载 ...

  5. Android 蓝牙A2dp 协议流程(一)

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. a2dp(A ...

  6. android spp传输速度,Android蓝牙SPP连接似乎在几秒后就已经死了

    我有一个相当简单的程序,主要基于这里发布的简单蓝牙测试客户端应用程序: 我的应用程序有4个按钮,每个按钮通过蓝牙连接发送不同的数据字节. 似乎工作得很好几秒钟.建立连接,RFCOMM插座连接,并在最初 ...

  7. android 蓝牙广播协议,Android蓝牙协议-蓝牙配对与连接

    蓝牙设备在连接前,会先检查设备是否已经配对过,如果没有则先配对,配对完成后,再开始连接. onPreferenceTreeClick 蓝牙连接开始于设备列表 DeviceListPreferenceF ...

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

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

  9. Android 蓝牙开发底层的几种协议介绍

    Android 蓝牙相关协议 1.HCI 协议 2.RFcomm 协议 3.L2CAP 协议 3.SDP 协议 4.ATT_GATT 协议 4.1 GAP 4.1.1. 设备角色 4.1.2 广播机制 ...

最新文章

  1. 集生态之力跨城市数字化之难题,英特尔交上了一份完美答卷
  2. mysql myisam innodb 区别
  3. java restfulapi 返回文件base64_Java反序列化:一次构造后Ysoserial Payload
  4. 每日一皮:我们最要避开的山寨产品...
  5. 大作完成了一部分,陆续往上放吧
  6. Android应用中的动画详细使用教程
  7. 如何修改pjsip默认的c++依赖库版本
  8. 电脑睡眠快捷键_电脑快速进入睡眠的快捷键是什么?
  9. e.html5.qq.com,QQ群官网-开放能力
  10. Makefile:跟我一起学makefile
  11. 前景检测算法(六)--平均背景原理
  12. 微信支付:不支持虚拟货币交易 如发现违规行为将予以清退处理
  13. 电商后台管理项目的步骤分析
  14. H5+CSS前端特效源代码:可旋转动态日文片假名
  15. matlab皮肤色号检测,彩色图像中的人脸(肤色)检测
  16. iOS StoreKit 2 新特性解析
  17. PMP证书对非项目管理者有意义吗?
  18. ajax 服务路由,Angular自定义服务路由
  19. window7旗舰版安装语言包
  20. 修改host访问远景论坛

热门文章

  1. matlab 频率抽样,matlab课程设计(基于频率抽样发设计滤波器)
  2. 女生证件照怎么制作?分享好用的制作方法
  3. 【入门级】在Python里用while循环实现阶乘
  4. 关于人,世界,生活等本质的思考
  5. maskrcnn-benchmark-master(八):build_roi_box_head()函数
  6. 如何编写通达信数据接口l2与MACD有效结合的源码?
  7. 【Dubbo】微服务架构(二): 如何把应用分解成多个服务
  8. excel导出设置密码(文件不会损坏,看关键那一步),,
  9. MP5移动硬盘播放器
  10. 重磅开源! 9 个 yyds 图像识别模型