Android Bluetooth蓝牙技术基础讲解

原创 2016年05月30日 17:28:46

一:Bluetooth包简介

Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下:


BluetoothAdapter类

代表了一个本地的蓝牙适配器。它是所有蓝牙交互的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。


BluetoothDevice类

代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态(其信息是封装在BluetoothSocket中)。


BluetoothSocket类

代表了一个蓝牙套接字的接口(类似于TCP中的套接字),它是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。


BlueboothServerSocket类

代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,BlueboothServerSocket类将会返回一个BluetoothSocket。


二:常用类的使用

BluetoothAdapter:蓝牙适配器

cancelDiscovery()取消探索,当我们正在搜索设备的时候调用这个方法将不再继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,以下两行代码同样是打开蓝牙,但会提示用户:

Intentenabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enabler);
getAddress()获取本地蓝牙地址
getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter
getName()获取本地蓝牙名称
getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备
getState()获取本地蓝牙适配器当前状态
isDiscovering()判断当前是否正在查找设备,是则返回true
isEnabled()判断蓝牙是否打开,已打开返回true,否则返回false
listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步
startDiscovery()开始搜索,这是搜索的第一步


BluetoothDevice:远程蓝牙设备

createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket,这个方法也是我们获取BluetoothDevice
的目的——创建BluetoothSocket

这个类其他的方法,如getAddress()、getName()等,同BluetoothAdapter。


BluetoothSocket:客户端

//这个类一共有6个方法

close()关闭

connect()连接

isConnected()判断是否连接

getInptuStream()获取输入流

getOutputStream()获取输出流

getRemoteDevice()获取

BluetoothSocket指定连接的远程蓝牙设备


BluetoothServerSocket:服务端

//这个类一共有4个方法
accept()
accept(int timeout)
close()关闭
getChannel()返回这个套接字绑定的通道

两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行。还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接


三:数据传输

蓝牙数据传输——服务器端

1、获得BluetoothAdapter。 
2、通过BluetoothAdapter.listenUsingRfcommWithServiceRecord(name,UUID uuid)方法创建BluetoothServerSocket对象。 
3、通过luetoothServerSocket.accept()方法返回一个BluetoothSocket对象。由于该方法处于阻塞状态,需要开启线程来处理。 
4、通过BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法获得读写数据的InputStream和OutputStream对象。 
5、通过InputStream.read()方法来读数据。通过OutputStream.write()方法来写数据。


蓝牙数据传输——客户端

1、获得BluetoothAdapter。 
2、通过BluetoothAdapter.getRemoteDevice(String address)获得指定地址的BluetoothDevice对象。 
3、通过BluetoothDevice.createRfcommSocketToServiceRecord (UUID uuid)方法创建BluetoothSocket对象。
4、通过BluetoothSocket.connect()方法来连接蓝牙设备。 
5、通过BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法获得读写数据的InputStream和OutputStream对象。 
6、通过InputStream.read()方法来读数据。通过OutputStream.write()方法来写数据。


四:Tip

UUID

// UUID:全局唯一标识符,格式为:88888888-44444-44444-44444-123456AAAAAA

// 两个蓝牙设备进行连接需要使用同一个UUID


添加权限

BLUETOOTH_ADMIN
BLUETOOTH


?

深入了解Android蓝牙Bluetooth ——《总结篇》

在我的上两篇博文中讲解了有关android蓝牙的认识以及API的相关的介绍,蓝牙BLE的搜索,连接以及读取。 没有了解的童鞋们请参考: * 深入了解Android蓝牙Bluetooth——《基础篇...
  • androidstarjack
  • androidstarjack
  • 2017年03月07日 22:35
  • 5253

BlueTooth: 蓝牙技术入门者指南

玩蓝牙,先要识蓝牙!  蓝牙是什么?蓝牙可以做什么?你每次听到这个耳熟的科技名称时,可能无法具体想 像它是什么样的。事实上,蓝牙技术能让许多3C产品变得更加方便好用,它不但可以取代传统的传输线连...
  • u011352311
  • u011352311
  • 2015年03月26日 17:36
  • 1550

Bluetooth MESH探究 --- (8) 怎么实现MESH网络?

Bluetooth MESH目前采用的是基于flooding协议的MESH网络技术。在发布的协议版本中,有提到在未来的修订版本中可能会加入基于路由协议的MESH网络。   的确,flooding协议是...
  • yangfei1328
  • yangfei1328
  • 2017年08月06日 01:41
  • 2393

Android蓝牙技术Bluetooth使用流程(详解)

蓝牙设备之间的通信主要包括了四个步骤设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输具体编程实现1. 启动蓝牙功能首先通过调用静态方法getDefaultAdapter()获...
  • pengkv
  • pengkv
  • 2016年02月12日 20:32
  • 4747

Android蓝牙技术Bluetooth初体验

一:Bluetooth包简介//Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下:BluetoothAdapte...
  • pengkv
  • pengkv
  • 2016年02月12日 19:28
  • 2320

Android Bluetooth蓝牙技术使用流程详解

转载自 : http://www.jb51.net/article/79335.htm 这篇文章主要介绍了Android Bluetooth蓝牙技术使用流程详解的相关资料,需要的朋友...
  • Creeper_san
  • Creeper_san
  • 2016年05月08日 09:45
  • 365

android Bluetooth蓝牙技术出体验

转自:http://www.jb51.net/article/79334.htm1.Bluetooth包简介Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信...
  • txadf
  • txadf
  • 2016年08月15日 22:15
  • 214

蓝牙技术基础

  • 2013年08月11日 15:03
  • 2.85MB
  • 下载

Android Bluetooth蓝牙技术初体验

转载自 : http://www.jb51.net/article/79334.htm 这篇文章主要介绍了Android Bluetooth蓝牙技术初体验的相关资料,需要的朋友可以参考下 ...
  • Creeper_san
  • Creeper_san
  • 2016年05月08日 09:41
  • 245

Android Bluetooth蓝牙技术使用流程详解

转自:http://m.jb51.net/article/79335.htm Android Bluetooth蓝牙技术使用流程详解 作者:pengkv 这篇文章主要介绍了And...
  • jasonhui512
  • jasonhui512
  • 2016年11月22日 18:04
  • 249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Bluetooth蓝牙技术基础讲解
举报原因:
原因补充:

(最多只允许输入30个字)