美文网首页
一、Android BLE开发踩坑全记录

一、Android BLE开发踩坑全记录

作者: 七_0702 | 来源:发表于2019-02-18 11:59 被阅读0次

    前言

    读到这篇文章的想必对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);
                }
            }
        };
    

    相关文章

      网友评论

          本文标题:一、Android BLE开发踩坑全记录

          本文链接:https://www.haomeiwen.com/subject/jyzoeqtx.html