一、Android BLE开发踩坑全记录

2019-02-18  本文已影响0人  七_0702

前言

读到这篇文章的想必对BLE开发都有着一定的认知了,在这小编就不多做介绍了,直接开始正题。

问题1:权限配置

    <!--必选权限-->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <!-- Android6.0及以上版本 蓝牙扫描才需要-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 读写权限(与蓝牙开发无关)-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

问题2:手机权限适配

    /**
     * 初始化蓝牙
     * 支持返回适配器 不支持返回null
     */
    public BluetoothAdapter initBLE() {
        // 检查当前手机是否支持ble 蓝牙,如果不支持退出程序
        if (BaseApplication.instance.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            //支持BLE 打开蓝牙
            BluetoothManager bluetoothManager = (BluetoothManager) BaseApplication.instance
                    .getSystemService(Context.BLUETOOTH_SERVICE);

            bleAdapter = bluetoothManager.getAdapter();
            return bleAdapter;
        } else {
            //不支持蓝牙BLE
            return null;
        }
    }

问题3:手机版本适配

    /**
     * 手机版本是否需要打开定位
     * true 需要定位 false 不需要
     */
    public boolean isVersionSDK() {
        //6.0以上需要打开定位
        if (Build.VERSION.SDK_INT >= 6.0) {
            //未开启定位权限
            return ContextCompat.checkSelfPermission(BaseApplication.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED;
        } else {
            return false;
        }
    }

问题4:蓝牙回调(重点)

    /**
     * 搜索蓝牙回调
     */
    private BluetoothAdapter.LeScanCallback bleScanCallback = new BluetoothAdapter.LeScanCallback() {
        @Override
        public void onLeScan(BluetoothDevice device, int arg1, byte[] arg2) {
            /** 注意:如果蓝牙回调慢的话就把这段代码注掉,因为很多蓝牙的设备名称是有问题的
             String name = device.getName();
             if (name == null)
             return;
             */
            // device就是搜索到的设备
            if (BluetoothController.this.serviceHandler != null) {
                Message msg = new Message();
                msg.what = ConstantUtils.BLUETOOTH_DEVICE_INFO;
                msg.obj = device;
                BluetoothController.this.serviceHandler.sendMessage(msg);
            }
        }
    };
上一篇下一篇

猜你喜欢

热点阅读