我需要以编程方式连接蓝牙启用的Android设备的列表(多个)。我获得了启用蓝牙的设备数量并将其排序在列表中,同时尝试将其与第一个设备配对并且循环结束。
if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
pairAllDevice(mDeviceList);
showToast("finished");
display();
}
private void pairAllDevice(ArrayList<BluetoothDevice> data)
{
if(!pairedDevice.isEmpty()) {
pairedDevice.clear();
}
for(int i=0;i<data.size();i++)
{
pairDevice(data.get(i));
}
}
这是配对的功能
private void pairDevice(BluetoothDevice device) {
try {
Method method = device.getClass().getMethod("createBond", (Class[]) null);
method.invoke(device, (Object[]) null);
pairedDevice.add(device);
} catch (Exception e) {
Log.e("error","connecting");
e.printStackTrace();
}
}
我已经实现了隐式配对,所以我在另一端的应用程序得到自动配对,但是现在它仅适用于列表中的一个设备..
答案 0 :(得分:0)
createBond方法不会抛出异常,它只是在立即错误时返回false。但是,如果它确实返回,它仍然不意味着粘合过程是成功的。您应该注册ACTION_BOND_STATE_CHANGED,看看是否从那里获得任何值(然后才将设备添加到列表中)。
此外,在您的代码中,您不必在创建新的绑定过程之前等待绑定过程在一个设备上完成。我不确定这是否是android无法处理的东西,但如果我是你,我会在开始新的之前等待一个绑定过程完成