您的位置:首页 > 其它

蓝牙开发经验小结——自动配对

2017-12-05 14:56 204 查看
场景:控制端——普通手机;被控制端——XX设备(无屏幕、无法用户操作、有系统权限)

蓝牙开启后查找设备有两种方式:搜索和指定mac。用搜索功能查找蓝牙设备,涉及“可见性”的概念,蓝牙对外可见(即能被别的蓝牙设备搜索到)最多可设置为300s(即5分钟),而指定mac的方式则没有时间限制,只要蓝牙开启就可以找到设备。因为XX设备与控制端需要随时能(配对)连接,显然搜索查找的方式,不适用于XX设备。因此只能选择指定mac地址的方式。

配对是建立连接的基础,任何从未配对过(或曾经配对但其中一方已删除配对关系)的设备都无法建立连接,因此配对无法绕过。配对的方式有输入pin码、输入密码、免输入的随机验证码等多种。当前XX设备与控制端的配对方式为免输入的随机验证码,两端确认6位数密码一致,点击“确认配对”即可完成配对。但由于XX设备无法用户交互,所以只能由程序完成确认实现自动配对——当然,XX设备只针对确定来源的请求(如XX助手)才默认同意并接受配对。

自动配对的实现(需系统权限):

权限声明:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-permission android:name="android.permission.ACCESS_BLUETOOTH_SHARE" />


注册广播:

IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
filter.setPriority(1000);//注意设置优先级,否则无法拦截
context.registerReceiver(mReceiver, filter);


检查通过同意配对:

case BluetoothDevice.ACTION_PAIRING_REQUEST:
BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (btDevice.getName().contains("你同意配对的蓝牙名称")) {
Log.e("here", "OKOKOK");
try {
//1.确认配对
ClsUtils.setPairingConfirmation(btDevice.getClass(), btDevice, true);
//2.终止有序广播
Log.i("order...", "isOrderedBroadcast:" + isOrderedBroadcast() + ",isInitialStickyBroadcast:" + isInitialStickyBroadcast());
abortBroadcast();//如果没有将广播终止,则会出现一个一闪而过的配对框。
//3.调用setPin方法进行配对...
//boolean ret = ClsUtils.setPin(btDevice.getClass(), btDevice, pin);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Log.e("提示信息", "这个设备不是目标蓝牙设备");
}
break;


备注,关于ClsUtils有模板,网上随便搜索一下一大把,这里就不再赘述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  自动配对