Java code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 创建一个接收 ACTION_FOUND 广播的 BroadcastReceiver
private
final
BroadcastReceiver mReceiver =
new
BroadcastReceiver() {
public
void
onReceive(Context context, Intent intent) {
String action = intent.getAction();
//
发现设备
if
(BluetoothDevice.ACTION_FOUND.equals(action)) {
// 从 Intent
中获取设备对象
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 将设备名称和地址放入 array adapter,以便在 ListView
中显示
mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
}
}
};
// 注册 BroadcastReceiver
IntentFilter filter =
new
IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
//
不要忘了之后解除绑定
4. 蓝牙 Socket 通信
如果打算建议两个蓝牙设备之间的连接,则必须实现服务器端与客户端的机制。当两个设
备在同一个 RFCOMM channel 下分别拥有一个连接的 BluetoothSocket,这两个设备才可
以说是建立了连接。
服务器设备与客户端设备获取 BluetoothSocket 的途径是不同的。服务器设备是通过
accepted 一个 incoming connection 来获取的,而客户端设备则是通过打开一个到服务器的
RFCOMM channel 来获取的。
服务器端的实现
通过调用 BluetoothAdapter 的 listenUsingRfcommWithServiceRecord(String, UUID)方法来获
取 BluetoothServerSocket(UUID 用于客户端与服务器端之间的配对)
调用 BluetoothServerSocket 的 accept()方法监听连接请求,如果收到请求,则返回一个
BluetoothSocket 实例(此方法为 block 方法,应置于新线程中)
如果不想在 accept 其他的连接,则调用 BluetoothServerSocket 的 close()方法释放资源(调
用该方法后,之前获得的 BluetoothSocket 实例并没有 close。但由于 RFCOMM 一个时刻只
允 许 在 一 条 channel 中 有 一 个 连 接 , 则 一 般 在 accept 一 个 连 接 后 , 便 close 掉
BluetoothServerSocket)
Java code
1
2
3
private
class
AcceptThread
extends
Thread {
private
final
BluetoothServerSocket mmServerSocket;
找软件资料,就到一览软件文库
http://wk.yl1001.com/rj/