MB蓝牙技术使用流程
MB蓝牙是一种无线技术标准,用于汽车设备之间的通信。具体解释如下:
1. 蓝牙设备之间的通信主要包括了四个步骤:
a. 设置蓝牙设备:首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了。
b. 寻找局域网内可能或者匹配的设备:使用BluetoothAdapter类里的方法,你可以查找远端设备(大概十米以内)或者查询在你手机上已经匹配(或者说绑定)的其他设备了。当然需要确定对方蓝牙设备已经开启或者已经开启了“被发现使能”功能(对方设备是可以被发现的)。
c. 连接设备:在应用程序中,想建立两个蓝牙设备之间的连接,必须实现客户端和服务器端的代码。一个必须作为服务端(通过持有一个打开的BluetoothServerSocket),目的是监听外来连接请求,当监听到以后提供一个连接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket以后就可以销毁BluetoothServerSocket,除非你还想监听更多的连接请求。
d. 设备之间的数据传输:使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求。
2. 具体编程实现
a. 启动蓝牙功能:启动蓝牙功能首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了。
b. 查找设备:使用BluetoothAdapter类里的方法,你可以查找远端设备(大概十米以内)或者查询在你手机上已经匹配的其他设备了。建立一个蓝牙连接只需要MAC地址就已经足够。
c. 查询匹配好的设备:在应用程序中,想建立两个蓝牙设备之间的连接,必须实现客户端和服务器端的代码。一个必须作为服务端(通过持有一个打开的BluetoothServerSocket),目的是监听外来连接请求,当监听到以后提供一个连接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket以后就可以销毁BluetoothServerSocket,除非你还想监听更多的连接请求。
d. 使能被发现:如果你想使你的设备能够被其他设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent,int)方法就可以了。它将在不使你应用程序退出的情况下使你的设备能够被发现(此过程中,如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户。RFCOMM连接请求会在用户选择之前阻塞)。
e. 连接设备:在应用程序中,想建立两个蓝牙设备之间的连接,必须实现客户端和服务器端的代码。一个必须作为服务端(通过持有一个打开的BluetoothServerSocket),目的是监听外来连接请求,当监听到以后提供一个连接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket以后就可以销毁BluetoothServerSocket,除非你还想监听更多的连接请求。
f. 服务端的连接:为了初始化一个与远端设备的连接,需要先获取代表该设备的一个BluetoothDevice对象。通过BluetoothDevice对象来获取BluetoothSocket并初始化连接,具体步骤:使用BluetoothDevice对象里的方法createRfcommSocketToServiceRecord(UUID)来获取BluetoothSocket。UUID就是匹配码。然后,调用connect()方法来。如果远端设备接收了该连接,他们将在通信过程中共享RFFCOMM信道,并且connect返回。
g. 管理连接:当设备连接上以后,每个设备都拥有各自的BluetoothSocket。就可以实现设备之间数据的共享了。首先通过调用getInputStream()和getOutputStream()方法来获取输入输出流。然后通过调用read(byte[])和write(byte[]).方法来读取或者写数据。
注意:在设备discover过程中不应该发起连接connect(),这样会明显减慢速度以至于连接失败。且数据传输完成只有调用close()方法来关闭连接,这样可以节省系统内部资源。
3. 使能被发现:如果你想使你的设备能够被其他设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent,int)方法就可以了。它将在不使你应用程序退出的情况下使你的设备能够被发现。缺省情况下的使能时间是120秒,当然你可以通过添加EXTRA_DISCOVERABLE_DURATION字段来改变使能时间(最大不超过300秒)。
注意:在此过程中,如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户。RFCOMM连接请求会在用户选择之前阻塞。