欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝牙BLE 4.0 FastBle 蓝牙扫描

程序员文章站 2024-03-24 23:06:10
...

1.初始化及配置

   //初始化 及 配置
        BleManager.getInstance().init(getApplication());
        BleManager.getInstance()
                //是否显示框架内部日志
                .enableLog(true)
                //重连次数
                .setMaxConnectCount(17)
                //操作超时 5秒
                .setOperateTimeout(5000);

2. 获取到BluetoothAdapter

 BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

 3.判断蓝牙是否打开

    if (!bluetoothAdapter.isEnabled()) {
            Toast.makeText(this, getString(R.string.please_open_blue), Toast.LENGTH_LONG).show();
            return;
        }

 4.动态权限获取  (模糊定位)

  //校验是否已具有模糊定位权限
            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
                //申请模糊定位权限
                ActivityCompat.requestPermissions(MainActivity.this
                        , new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
            }

 5.开始扫描

   BleManager.getInstance().scan(new BleScanCallback() {
            @Override
            public void onScanStarted(boolean success) {
                // 本次扫描动作是否开启成功 success
                //会回到主线程,参数表示本次扫描动作是否开启成功。由于蓝牙没有打开,上一次扫描没有结束等原因,会造成扫描开启失败。
            }

            @Override
            public void onLeScan(BleDevice bleDevice) {
                super.onLeScan(bleDevice);
                //扫描过程中所有被扫描到的结果回调。由于扫描及过滤的过程是在工作线程中的,此方法也处于工作线程中。同一个设备会在不同的时间,携带自身不同的状态(比如信号强度等),出现在这个回调方法中,出现次数取决于周围的设备量及外围设备的广播间隔。
            }

            @Override
            public void onScanning(BleDevice bleDevice) {
                //扫描过程中的所有过滤后的结果回调。与onLeScan区别之处在于:它会回到主线程;同一个设备只会出现一次;出现的设备是经过扫描过滤规则过滤后的设备。
            }

            @Override
            public void onScanFinished(List<BleDevice> scanResultList) {
                //本次扫描时段内所有被扫描且过滤后的设备集合。它会回到主线程,相当于onScanning设备之和。
           
            }
        });