从广播接收器以编程方式连接 Android 中的蓝牙设备
Programmatically connect Bluetooth Device in Android from Broadcast Receiver
在我的广播接收器中,我检索到了绑定蓝牙设备的列表。
BluetoothStateChangedReceiver extends BroadcastReceiver
这是我获得配对设备的方式:
private void getPairedDevices(){
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if (pairedDevices == null || pairedDevices.size() == 0) {
showToast("No Paired Devices Found");
} else {
ArrayList<BluetoothDevice> list = new ArrayList<BluetoothDevice>();
list.addAll(pairedDevices);
mPairedDeviceList = list;
}
}
我调用这段代码:
BluetoothDevice device = mPairedDeviceList.get(0);
deviceName = device.getName();
if(device.getBondState()==device.BOND_BONDED){
Log.d(TAG,"Device Name"+device.getName());
BluetoothSocket mSocket= null;
try {
mSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e1) {
Log.d(TAG,"socket not created");
e1.printStackTrace();
}
try{
mSocket.connect();
}
catch(IOException e) {
try {
mSocket.close();
Log.d(TAG, "Cannot connect");
} catch (IOException e1) {
Log.d(TAG, "Socket not closed");
e1.printStackTrace();
}
}
}
我的 UUID 是
private static final UUID MY_UUID = UUID.fromString("DEADBEEF-0000-0000-0000-000000000000");
但是,我始终无法连接到设备?
我只是想在打开蓝牙后以编程方式连接到蓝牙扬声器。我错过了什么?
方法 createInsecureRfcommSocketToServiceRecord 在 Android 2.1 和 2.2 上有一些问题。以下代码在 catch 部分处理这些设备:
try {
mBtSocket = btDevice
.createRfcommSocketToServiceRecord(BT_SRVC_UUID);
mBtSocket.connect();
} catch (Exception e) {
Log.e(TAG, "createInsecureRfcommSocket", e);
Log.d(TAG, "trying with reflection");
BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter()
.getRemoteDevice(btDevice.getAddress());
Method m;
m = hxm.getClass().getMethod("createRfcommSocket",
new Class[] { int.class });
mBtSocket = (BluetoothSocket) m.invoke(hxm, Integer.valueOf(1));
mBtSocket.connect();
}
要获取 btDevice 和 BT_SRVC_UUID 我使用以下代码:
BluetoothDevice btDevice = BluetoothAdapter.getDefaultAdapter()
.getRemoteDevice(macBtAddress);
最后,您应该始终确保设备没有运行
调用 connect() 时的设备发现。
mBluetoothAdapter.cancelDiscovery();
要获取设备的 macBTAddress,您可以使用 bluetoothAdapter 搜索设备并获取之前配对设备的 mac 地址。以后mac地址不会变,可以保存。
BT_SRV_UUID 是您的服务的 ID。您可以选择您喜欢的 UUID,只要确保它具有有效的语法(您可以使用我的代码中建议的那个)。
在我的广播接收器中,我检索到了绑定蓝牙设备的列表。
BluetoothStateChangedReceiver extends BroadcastReceiver
这是我获得配对设备的方式:
private void getPairedDevices(){
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if (pairedDevices == null || pairedDevices.size() == 0) {
showToast("No Paired Devices Found");
} else {
ArrayList<BluetoothDevice> list = new ArrayList<BluetoothDevice>();
list.addAll(pairedDevices);
mPairedDeviceList = list;
}
}
我调用这段代码:
BluetoothDevice device = mPairedDeviceList.get(0);
deviceName = device.getName();
if(device.getBondState()==device.BOND_BONDED){
Log.d(TAG,"Device Name"+device.getName());
BluetoothSocket mSocket= null;
try {
mSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e1) {
Log.d(TAG,"socket not created");
e1.printStackTrace();
}
try{
mSocket.connect();
}
catch(IOException e) {
try {
mSocket.close();
Log.d(TAG, "Cannot connect");
} catch (IOException e1) {
Log.d(TAG, "Socket not closed");
e1.printStackTrace();
}
}
}
我的 UUID 是
private static final UUID MY_UUID = UUID.fromString("DEADBEEF-0000-0000-0000-000000000000");
但是,我始终无法连接到设备?
我只是想在打开蓝牙后以编程方式连接到蓝牙扬声器。我错过了什么?
方法 createInsecureRfcommSocketToServiceRecord 在 Android 2.1 和 2.2 上有一些问题。以下代码在 catch 部分处理这些设备:
try {
mBtSocket = btDevice
.createRfcommSocketToServiceRecord(BT_SRVC_UUID);
mBtSocket.connect();
} catch (Exception e) {
Log.e(TAG, "createInsecureRfcommSocket", e);
Log.d(TAG, "trying with reflection");
BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter()
.getRemoteDevice(btDevice.getAddress());
Method m;
m = hxm.getClass().getMethod("createRfcommSocket",
new Class[] { int.class });
mBtSocket = (BluetoothSocket) m.invoke(hxm, Integer.valueOf(1));
mBtSocket.connect();
}
要获取 btDevice 和 BT_SRVC_UUID 我使用以下代码:
BluetoothDevice btDevice = BluetoothAdapter.getDefaultAdapter()
.getRemoteDevice(macBtAddress);
最后,您应该始终确保设备没有运行 调用 connect() 时的设备发现。
mBluetoothAdapter.cancelDiscovery();
要获取设备的 macBTAddress,您可以使用 bluetoothAdapter 搜索设备并获取之前配对设备的 mac 地址。以后mac地址不会变,可以保存。
BT_SRV_UUID 是您的服务的 ID。您可以选择您喜欢的 UUID,只要确保它具有有效的语法(您可以使用我的代码中建议的那个)。