您的位置:首页 > 移动开发 > Android开发

Android蓝牙实现自动配对,无需输入密码

2015-01-21 22:50 971 查看
在项目开发中,需要连接一个蓝牙设备,实现自动配对,经过尝试和分析Android源码,最终问题得以解决:

网上较为流行的ClsUtils工具类并不能满足我的要求,

(1)首先分析一下ClsUtils工具类,通过接受Action为android.bluetooth.device.action.PAIRING_REQUEST的广播,并且在接到广播后,调用一下方法实现自动配对

ClsUtils.setPin(btDevice.getClass(), btDevice, strPsw); // 手机和蓝牙采集器配对

ClsUtils.createBond(btDevice.getClass(), btDevice);

ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice);

缺点是,“蓝牙配对请求”对话框会显示一下,然后再消失,并且不是十分可靠,即有的时候“蓝牙配对请求”对话框弹出后不能自己消失,而蓝牙确实已经配对成功了。

(2)我的解决方案:

在开发过程中我们往往通过反射createBond方法,实现配对功能

if (mBluetoothDevice.getBondState() != BluetoothDevice.BOND_BONDED) {

Method creMethod = BluetoothDevice.class.getMethod("createBond");

creMethod.invoke(mBluetoothDevice);

}

配对成功后获取Socket对象,然后执行socket.connect()方法进行连接,开发过程中我发现即使蓝牙设备已经绑定了,在执行socket.connect()方法时还是偶尔会弹出“蓝牙配对请求”对话框,经过分析源码我发现是我创建的Socket的原因,将通过createRfcommSocket创建对象,改为通过createInsecureRfcommSocket创建socket对象后,再执行connect()方法时不会再弹出配对请求,即这种方法只需在第一次绑定成功之后,就再也不用输入密码,而是实现自动配对了。但是我不清楚这对获取的数据会有什么影响!还需要进一步了解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: