background image

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/