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

android ble 4.0实现自动配对

2015-08-25 00:13 495 查看
这几天在开发与蓝牙4.0Ble的通讯,因需求要求android必须能过自动与蓝牙配对。于是就开始上网找资料,查出来最多的就是说是用 ClsUtils 这个类,说利用反射调用封起来的方法,我直接copy 拿来使用,但是不管用。发现setPin 与 cancelPairingUserInput 一起调用就会失败,ok! 废话少说,直接进入主题:

IntentFilter filter = new IntentFilter("android.bluetooth.adapter.action.STATE_CHANGED");
filter.addAction("android.bluetooth.device.action.PAIRING_REQUEST");
filter.setPriority(Integer.MAX_VALUE);
context.registerReceiver(blueBroadcastReceivetr, filter);

重点是android.bluetooth.device.action.PAIRING_REQUEST 接收这个广播 并且设置优先级为最大

定义广播接收者 部分代码

else if (intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if ("不是你业务的设备")
return;

try {
int mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
// 蓝牙有两种配对类型一种是pin,一种是密钥 先搞清楚你的设备是哪一种在做,不然瞎忙活
boolean isSuccess;
switch (mType) {
case 0:
// 反射 不会自己收ClsUtils
isSuccess = ClsUtils.setPin(device.getClass(), device, 123456);
break;
case 1:
// 这个方法是我自己加的 ,不会的可以照着setPin写一个setPasskey boolean
// Bluetooth.setPasskey(int)
isSuccess = ClsUtils.setPassKey(device.getClass(), device, 123456);
}

//配对不成功就弹出来
if (isSuccess) {
// 重点 先前已经设置我的广播接收者的优先者为最高 收到广播后 停止广播向下传递
// 因为系统的配对框的消失与弹出是通过广播做到的 我看源码得知 ,我们要将它
// 扼杀在摇篮中
abortBroadcast();
// 怕没拦截成功 补上一刀 发送一个关闭对话框的广播
context.sendBroadcast(new Intent("android.bluetooth.device.action.PAIRING_CANCEL"));
}

} catch (Exception e) {
e.printStackTrace();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: