今天继续蓝牙模块的学习,昨天学习了与蓝牙相关的类
BlueToothServer类
蓝牙系统和Socket套接字密切相关,蓝牙端的监听接口和TCP端口类似
都是使用了Socket和ServerSocket类,在服务器端,使用BluetoothSocket类去初始化并管理一个外接连接
最通常使用的蓝牙端口是RFCOMM,被API支持的类型。
RFCOMM,一种面向连接,通过蓝牙模块进行的数据流传输方式,串行端口规范SPP
使用方法BluetoothDevice.createRfcommSocketServiceRecord(),然后调用connect()方法,去尝试一个面向远程设备的连接
R:建立一个BluetoothSocket去连接一个已知设备
该调用将被阻塞,指导一个连接已经建或者该改链接失效
为了创建一个BluetoothSocket作为服务端(主机),每当该端口连接成功后,无论它初始化为客户端,或者被接受作为服务器端,都通过方法getInputStream()和getOutputStream()来打开IO流,从而获得各自的InputStream和OutputStream对象。
BluetoothSocket类是线性安全的, close方法总会马上放弃外界操作并关闭服务器端口
BluetoothSocket类的公共方法
1、close()马上关闭该端口,并且释放所有的相关资源,在其他线程的该端口中引起阻塞,使得系统马上抛出IO异常
2、connect()尝试连接到远程设备,该方法将阻塞,指导一个连接建立或者失败,
如果该方法没有返回异常值,则该端口现在已经建立
当设备查询正在进行的时候,创建对远程蓝牙设备的新连接不可被尝试。
设备查找在蓝牙适配器上是一个重量级的过程,并且肯定会降低一个设备的连接
使用cancelDiscovery方法会取消一个外部查询,查询并 不是由活动所管理,而是作为一个系统服务来运行,
故即使不能直接请求一个查询,应用程序也会调用cancelDiscovery方法。
使用方法close方法可以用来放弃从另一个线程而来的调用
会抛IO异常,表示一个错误,如连接失败
3、getInputStream()通过连接的端口获得输入数据流
即使该端口未连接,该输入数据流也会返回
不过在该数据流上的操作将抛出异常,直到相关的连接已经建立,返回值是输入流
4、getOutputStream()通过连接的端口获得输出数据流
即使该端口未连接,该输出数据流也会返回
不过在该数据流上的操作将抛出异常,直到相关的连接已经建立,返回值是输出流
5、public BluetoothDevice getRemoteDevice()获取该端口正在连接或者已经连接的远程设备
BluetoothServerSocket类
格式和结构忽略
BluetoothServerSocket类的公共方法
1、public BluetoothSooket accept(int timeout)
阻塞直到超时时间内的连接建立,在一个成功建立的连接上返回一个一连接的BluetoothSocket类
每当该调用返回时,可以在此调用去接收以后新来的连接。
close方法可以用来放弃从另一个线程传来的调用
参数timeout表示阻塞超时时间
返回值是已连接的BluetoothSocket
抛出IO异常,表示出现错误,比如该调用被放弃或者是超时
2、public BluetoothSooket accept()
阻塞直到一个连接已经建立,在一个成功建立的连接上返回一个一连接的BluetoothSocket类
每当该调用返回时,可以在此调用去接收以后新来的连接。
close方法可以用来放弃从另一个线程传来的调用
返回值是已连接的BluetoothSocket
抛出IO异常,表示出现错误,比如该调用被放弃或者是超时
3、close()马上关闭该端口,并且释放所有的相关资源,在其他线程的该端口中引起阻塞,使得系统马上抛出IO异常
关闭BluetoothServerSocket不会关闭接受自accept 的任意BluetoothSocket
BluetoothAdapter类
格式与结构略
代表本地的蓝牙适配器设备,让用户能执行基本的蓝牙任务
(初始化设备的搜索,查询可匹配的设备集,使用一个已知的MAC地址来初始化一个BluetoothDevice类,创建一个BluetoothServerSocket类监听其他设备对本机的连接请求)
所有蓝牙动作的第一步:使用静态方法getDefaultAdapter来得到代表本地的蓝牙适配器的BluetoothAdapter类
当拥有本地设备器之后,获得一系列的BluetoothDevice对象,对象代表所有拥有getBoodedDevice方法的已经匹配的设备
用startDiscovery方法来开始搜索设备
或创建一个BluetoothServerSocket类通过listenUsingRfcommWithServiceRecord(String,UUID)方法来监听新来的数据
大部分方法需要BLUETOOTH权限
一些方法同时需要BLURTOOTH_ADMIN权限