Android 蓝牙编程
android蓝牙编程中一个典型discover/connect 操作有以下几步:
1 扫描可发现的设备
这一步使用BluetoothAdapter类,首先获得系统BluetoothAdapter对象,然后调用该对象的startDiscovery()方法来启动扫描,系统每扫描到一个蓝牙设备就会发送一个Action为“BluetoothDevice.ACTION_FOUND”的intent,所以要注册一个BroadcastReceiver来接收该intent
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothAdapter.startDiscovery();
1 final BroadcastReceiver mReceiver = new BroadcastReceiver() { 2 3 @Override 4 public void onReceive(Context arg0, Intent intent) { 5 // TODO Auto-generated method stub 6 7 String action = intent.getAction(); 8 // When discovery finds a device 9 if (BluetoothDevice.ACTION_FOUND.equals(action)) { 10 // Get the BluetoothDevice object from the Intent 11 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 12 mDevice = device;
13 } 14 } 15 };
2 使用SDP协议来获得被发现设备的Service UUID
public boolean fetchUuidsWithSdp ()
该方法是异步的,当获得一个设备的UUID列表(一个设备可以有多个SERVICE)后就会发送一个intent,因此,同样需要注册一个BroadcastReceiver,在OnReceive中获得UUID列表,当然通常一个设备只提供一个SERVICE。ps:一般的Bluetooth serial board的UUID为“00001101-0000-1000-8000-00805F9B34FB”,可以直接使用。
private final BroadcastReceiver mReceiveruuid = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { BluetoothDevice deviceExtra = intent.getParcelableExtra("android.bluetooth.device.extra.DEVICE"); Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID"); Log.d(TAG,"uuidExtra.length="+uuidExtra.length); Log.d(TAG,"uuid = "+uuidExtra[0].toString()); //Parse the UUIDs and get the one you are interested in } };
3 使用获得的UUID与设备建立连接
public BluetoothSocket createRfcommSocketToServiceRecord (UUID uuid)
浙公网安备 33010602011771号