android ble 4.0实现自动配对

这几天在开发与蓝牙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();
				}

			}



   


你可能感兴趣的:(android ble 4.0实现自动配对)