android ble4.0绑定

标签: android 蓝牙4.0 绑定蓝牙
41人阅读 评论(0) 收藏 举报
分类:
蓝牙BLE4.0绑定

    蓝牙的绑定其实网上的方法都是大同小异的,都是用的反射的方法去绑定蓝牙设备,在API19以后,ble配对其实已经可以不用反射配对,直接bleDevice对象去用createBond,然后再在配对广播里面使用bleDevice.setPin(),输入取消  用户输入对话框的代码,但是取消用户输入框没办法,还得用反射的方式,不过有的时候反射仍然去不掉 用户输入框 这时我们在广播里面直接将配对广播屏蔽掉

public class BLEClassUtil {
    private static final String TAG = "--" + BLEClassUtil.class.getSimpleName();

    /**
     * 取消用户输入
     *
     * @param bleDevice
     * @return
     */
    public static boolean cancelPairingUserInput(BluetoothDevice bleDevice) {

        final Method cancelPairingUserInput;
        boolean result = false;
        try {
            cancelPairingUserInput = bleDevice.getClass().getMethod("cancelPairingUserInput");
            Boolean returnValue = (Boolean) cancelPairingUserInput.invoke(bleDevice);
            result = returnValue.booleanValue();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        Logger.e(TAG, "cancelPairingUserInput         " + result);
        return result;
    }

    /**
     * 手机和蓝牙采集器配对
     *
     * @param bleDevice
     * @param str
     * @return
     * @throws Exception
     */
    public static boolean setPin(BluetoothDevice bleDevice, String str) {
        boolean value = false;

        try {
            Logger.e(TAG, "..........");
            final Method setPin = bleDevice.getClass().getDeclaredMethod("setPin", new Class[]{byte[].class});
            Logger.e(TAG, "..........");
            final Boolean invoke = (Boolean) setPin.invoke(bleDevice, new Object[]{str.getBytes()});
            value = invoke.booleanValue();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return value;

//        Logger.e(TAG, "setPin" + 111111111);
//        Method removeBondMethod = bleDevice.getClass().getMethod("setPin", new Class[]{byte.class});
//        Logger.e(TAG, "setPin" + 222222);
//
//        final Boolean returnValue = (Boolean) removeBondMethod.invoke(bleDevice, new Object[]{str.getBytes()});
//        Logger.e(TAG, "setPin" + 333333);
//        value = returnValue.booleanValue();
//        Logger.e(TAG, "setPin     SecurityException" + 333333);
//        return value;
    }

    /**
     * 绑定
     *
     * @param bleDevice
     * @return
     * @throws Exception
     */
    public static boolean createBond(BluetoothDevice bleDevice) {
        boolean result = false;
        try {
            final Method createBond = bleDevice.getClass().getMethod("createBond");
            final Boolean invoke = (Boolean) createBond.invoke(bleDevice);
            result = invoke.booleanValue();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 取消配对
     *
     * @param cls
     * @param bleDevice
     * @return
     * @throws Exception
     */
    public static boolean removeBond(Class cls, BluetoothDevice bleDevice) throws Exception {

        final Method removeBond = cls.getClass().getMethod("removeBond");
        final Boolean returnValue = (Boolean) removeBond.invoke(bleDevice);
        return returnValue.booleanValue();
    }



    /**
     * 取消绑定
     *
     * @param bleDevice
     * @return
     * @throws Exception
     */
    public static boolean cancelBondProcess(BluetoothDevice bleDevice) throws Exception {


//        Class.forName("cancelBondProcess")


        Logger.e(TAG, "++++");
        Method cancelBondProcess = bleDevice.getClass().getMethod("cancelBondProcess");
        Logger.e(TAG, "----");
        Boolean returnValue = (Boolean) cancelBondProcess.invoke(bleDevice);
        Logger.e(TAG, "%%%%%");
        return returnValue.booleanValue();
    }

这是我的工具类,在扫描到蓝牙,要绑定蓝牙的时候,假设我要绑定的蓝牙设备的对象是device;那么我就会先在代码里面敲上

        if (SDKUtil.isBigger(18)) {
            isCreate = device.createBond();
//            isCreate = device.setPin(pinStr.getBytes());
            Logger.e(TAG, "isCreate    " + isCreate);
        } else {
            BLEClassUtil.createBond(device);
//            isCreate = BLEClassUtil.setPin(device, pinStr);
        }

        BLEClassUtil.cancelPairingUserInput(device);//因为这个只能通过反射

然后在我们的静态注册广播,设置优先级为1000,这个广播里面里面写上如下代码:

public class PairBroadcastReceiver extends BroadcastReceiver {
    private String TAG = "--" + getClass().getSimpleName();


    @Override
    public void onReceive(Context context, Intent intent) {
        BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        if (intent.getAction().equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
            final int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
            boolean isSuccess = false;
            switch (type) {
                case 0:
                case 2:
                    if (SDKUtil.isBigger(18)) {
                        isSuccess = device.setPin("84512".getBytes());
                    } else {
                        isSuccess = BLEClassUtil.setPin(device, "84512");
                    }
                    break;
            }
            if (isSuccess) {
                Logger.e(TAG, "123456");
                abortBroadcast();//这个主要是在setpin成功后防止输入框的弹出 
            } else {
                if (SDKUtil.isBigger(18)) {
                    device.createBond();
                    Logger.e(TAG, "isBigger");
                } else {
                    BLEClassUtil.createBond(device);
                }
            }
        }
    }
}




查看评论

BLE4.0配对绑定过程的底层剖析

一、实验目的 1、了解主从配对绑定的过程中底层是怎么运行的; 二、说明 1、关于配对于绑定,网上查了很多资料都没查到什么,问了很多人也没有回答的,所以我决定自己深入了解底...
  • zhuangjitongxue
  • zhuangjitongxue
  • 2015-11-09 21:26:14
  • 5627

Android 蓝牙 BLE4.0代码

  • 2017年06月21日 17:01
  • 4.42MB
  • 下载

Android Ble4.0开发

最近在做一个蓝牙的项目,是Blu4.0,Android系统知识 http://blog.csdn.net/hellogv/article/details/6036849 http://blog.c...
  • xia215266092
  • xia215266092
  • 2014-11-16 14:19:59
  • 3263

nRF Connect

  • 2017年06月06日 16:53
  • 7.01MB
  • 下载

Android Ble4.0Demo

  • 2017年03月02日 09:18
  • 24.18MB
  • 下载

android蓝牙ble4.0开发

1、权限配置 AndroidManifest.xml里配置,“android:required="true"表示apk只有在具有bluetooth_le属性的系统里运行。 ...
  • young21234
  • young21234
  • 2015-11-18 22:26:30
  • 3171

Android(Java)开发之BLE4.0入门

这段时间要定制一个蓝牙BLE设备的主机端APP,负责读写iBeacon等设备的蓝牙数据,计划用Java和Qt for Android实现两个简单的demo,比较后决定继续基于哪个开发,其中Qt 蓝牙模...
  • hechao3225
  • hechao3225
  • 2016-12-29 17:01:07
  • 1128

Android蓝牙开发(二) BLE4.0低功耗蓝牙

一、BLE4.0低功耗蓝牙 Bluetooth Low Energy,蓝牙低功耗,是从蓝牙4.0开始支持的技术。相较传统蓝牙,传输速度更快、覆盖范围广、安全性高、延时短、耗电低等特点。 二、关键...
  • qwe380948730
  • qwe380948730
  • 2017-11-16 08:31:54
  • 522

蓝牙4.0BLE 读写 android

  • 2014年07月27日 14:55
  • 142KB
  • 下载

samsung android ble4.0 手机放丢源码及ble sdk包

  • 2013年06月21日 11:25
  • 168KB
  • 下载
    个人资料
    等级:
    访问量: 41
    积分: 11
    排名: 237万+
    文章分类
    文章存档
    阅读排行