蓝牙开发经验小结——自动配对
2017-12-05 14:56
204 查看
场景:控制端——普通手机;被控制端——XX设备(无屏幕、无法用户操作、有系统权限)
蓝牙开启后查找设备有两种方式:搜索和指定mac。用搜索功能查找蓝牙设备,涉及“可见性”的概念,蓝牙对外可见(即能被别的蓝牙设备搜索到)最多可设置为300s(即5分钟),而指定mac的方式则没有时间限制,只要蓝牙开启就可以找到设备。因为XX设备与控制端需要随时能(配对)连接,显然搜索查找的方式,不适用于XX设备。因此只能选择指定mac地址的方式。
配对是建立连接的基础,任何从未配对过(或曾经配对但其中一方已删除配对关系)的设备都无法建立连接,因此配对无法绕过。配对的方式有输入pin码、输入密码、免输入的随机验证码等多种。当前XX设备与控制端的配对方式为免输入的随机验证码,两端确认6位数密码一致,点击“确认配对”即可完成配对。但由于XX设备无法用户交互,所以只能由程序完成确认实现自动配对——当然,XX设备只针对确定来源的请求(如XX助手)才默认同意并接受配对。
自动配对的实现(需系统权限):
权限声明:
注册广播:
检查通过同意配对:
备注,关于ClsUtils有模板,网上随便搜索一下一大把,这里就不再赘述。
蓝牙开启后查找设备有两种方式:搜索和指定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有模板,网上随便搜索一下一大把,这里就不再赘述。
相关文章推荐
- 蓝牙开发经验小结——自动文件传输(OBEX)
- android之蓝牙开发续(自动配对)
- 蓝牙开发经验小结——蓝牙通讯
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- C#开发蓝牙服务端,自动配对以及收发消息
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- android 蓝牙自动配对问题
- Android学习之腾讯互动直播开发经验小结
- 基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
- 基于MVC4+EasyUI的Web开发框架经验总结(17)--布局和对话框自动适应大小的处理
- 开发经验小结(网络编程(1))---基础小知识
- 开发经验小结(网络编程(2))---套接字选项
- 基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
- Android蓝牙自动配对
- PDA开发经验小结
- 基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用