Hi,欢迎来到华清远见移动互联网学院官网!国内王牌JAVAEE培训、Android培训、HTML5培训、UI培训、JAVA培训、VR培训机构!

  • 400-611-6270
  • 新浪微博
  • 微信
您当前的位置:移动互联网学院 > Android开发 > Android开发蓝牙通信教程

Android开发蓝牙通信教程

时间:2017-04-19 09:55 来源:Android开发学习网

今天为大家分享一下Android开发中蓝牙通信方面的一些知识,从蓝牙基本操作开始

1.蓝牙基本操作

随着可穿戴设备的流行,现在研究蓝牙开发已经成为必不可少的一门技术了。这里小编总结一些Android蓝牙开发方面的知识,希望对大家学习和进行Android蓝牙开发有所帮助。

1>添加蓝牙权限

使用Android的系统功能需要先声明权限,所以进行蓝牙开发,首先要在AndroidManifest.xml文件中添加操作蓝牙的权限。

2>获取蓝牙适配器

BluetoothAdapter

BluetoothAdapter类是操作蓝牙,进行蓝牙开发时主要用到的类,使用时需导包。

import android.bluetooth.BluetoothAdapter;

源码具体位置frameworks/base/core/Java/android/bluetooth/BluetoothAdapter.java

BluetoothAdapter代表本地设备的蓝牙适配器。该BluetoothAdapter可以执行基本的蓝牙任务,例如启动设备发现,查询配对的设备列表,使用已知的MAC地址实例化一个BluetoothDevice类,并创建一个BluetoothServerSocket监听来自其他设备的连接请求。

获取蓝牙适配器:BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

3>与蓝牙有关的一些操作

开启蓝牙

Android开发蓝牙通信教程:开启蓝牙

获取本地蓝牙信息

Android开发蓝牙通信教程:获取本地蓝牙信息

搜索设备

mBluetoothAdapter.startDiscovery();

停止搜索

mBluetoothAdapter.cancelDiscovery();

监听扫描

搜索蓝牙设备是一个异步的过程,需要通过注册广播接收者监听扫描到设备。

Android开发蓝牙通信教程:监听扫描蓝牙

通过广播接收者查看扫描到的蓝牙设备,每扫描到一个设备,系统都会发送此广播(BluetoothDevice.ACTION_FOUNDE)。其中参数intent可以获取蓝牙设备BluetoothDevice。

Android开发蓝牙通信教程:监听扫描蓝牙2

设置蓝牙可见性

有时候扫描不到某设备,这是因为该设备对外不可见或者距离远,需要设备该蓝牙可见,这样该才能被搜索到。

可见时间默认值为120s,最多可设置300。

Android开发蓝牙通信教程:设置蓝牙可见性

2.服务端

android 蓝牙之间可以通过SDP协议建立连接进行通信,通信方式类似于平常使用socket。

首先创建BluetoothServerSocket ,BluetoothAdapter中提供了两种创建BluetoothServerSocket 方式,如下图所示为创建安全的RFCOMM Bluetooth socket,该连接是安全的需要进行配对。而通过listenUsingInsecureRfcommWithServiceRecord创建的RFCOMM Bluetooth socket是不安全的,连接时不需要进行配对。

其中的uuid需要服务器端和客户端进行统一。

Android开发蓝牙通信教程:服务端1

mServerSocket通过accept()等待客户端的连接(阻塞),直到连接成功或失败。

Android开发蓝牙通信教程:服务端2

3.客户端

客户端主要用来创建RFCOMM socket,并连接服务端。先扫描周围的蓝牙设备,如果扫描到指定设备则进行连接。

连接过程主要在ConnectThread线程中进行,先创建socket,方式有两种,下图是安全的。另一种不安全连接对应的函数是createInsecureRfcommSocketToServiceRecord。

Android开发蓝牙通信教程:客户端1

接着客户端socket主动连接服务端。连接过程中会自动进行配对,需要双方同意才可以连接成功。

Android开发蓝牙通信教程:客户端2

4.数据传输

客户端与服务端连接成功后都会创建一个ConnectedThread线程。该线程主要用来接收和发送数据。客户端和服务端处理方式一样。该线程通过socket获得输入输出流。

private InputStream mmInStream = socket.getInputStream();

private OutputStream mmOutStream =socket.getOutputStream();

发送数据

Android开发蓝牙通信教程:发送数据

接收数据

线程循环进行接收数据。

Android开发蓝牙通信教程:接收数据

  • 北京

    010-82600385/6

    北京市海淀区西三旗悦秀路北京明园大学校内

  • 上海

    021-54485127

    上海市徐汇区漕溪路250号银海大楼11层

  • 深圳

    0755-25590506

    深圳市龙华新区人民北路美丽AAA大厦15层

  • 成都

    028-85405115

    成都武侯区科华北路99号科华大厦2层

  • 南京

    025-86551900

    南京市白下区汉中路185号鸿运大厦11层

  • 武汉

    027-87804688

    武汉工程大学卓刀泉校区科技孵化器大楼11层

  • 西安

    029-88756251

    西安市高新区高新1路12号天公大厦3层

  • 广州

    020-38342087

    广州市天河软件园柯木塱园5栋三层

  • 沈阳

    024-24349000

    沈阳市沈河区北顺城路137号锦峰大厦7层

  • 济南

    0531-88898293

    济南市高新区舜华路三庆世纪财富中心B3座6层

  • 重庆

    023-68064704

    重庆市九龙坡区渝州路87号双薪时代九楼

  • 长沙

    15010390966

    长沙市开福区芙蓉中路海东青大厦B座11楼

Copyright © 2004-2017 华清远见教育集团 版权所有,沪ICP备10038863号-3,京公海网安备110108001117号