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

Android BLE蓝牙使用 一

程序员文章站 2022-03-16 17:17:52
...

AndroidBle蓝牙开发

一 是否支持BLE蓝牙

 private boolean isSupportBluetooth(boolean istoast) {
        if (!this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            if (istoast) {
                Toast.makeText(this, "你的设备不支持蓝牙", Toast.LENGTH_SHORT).show();
            }
            return false;
            // ((MainActivity) context).finish();

        }
        final BluetoothManager bluetoothManager =
                (BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            mBluetoothAdapter = bluetoothManager.getAdapter();
        }
        // Checks if Bluetooth is supported on the device.
        if (mBluetoothAdapter == null) {
            if (istoast) {
                Toast.makeText(this, "你的设备不支持Ble蓝牙", Toast.LENGTH_SHORT).show();
            }
            return false;
        }

        return true;
        }

二 如果支持我们就注册广播接收器来接收我们需要的蓝牙数据,然后具体的蓝牙操作封装在MyBluetoothLeService里面 绑定服务 。最后 如果判断蓝牙是否开启 如果开启我们就进行蓝牙的扫描 ,扫描前 我们需要申请权限 这边我们用的是 EasyPermissions框架来请求权限 最后我们就开启扫描

  /**
     * 初始化蓝牙设备包括我们的打开蓝牙等操作
     */
    private void initBluetooth() {
        supportBluetooth = isSupportBluetooth(true);
        if (supportBluetooth) {
            //注册广播接收器
            registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
            Intent gattServiceIntent = new Intent(this, MyBluetoothLeService.class);
            bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
            if (mBluetoothAdapter.isEnabled()) {
                if (EasyPermissions.hasPermissions(this, bluePermission)) {
                    startBluetoothSearch();
                } else {
                    EasyPermissions.requestPermissions(this, "", Constant.REQUESTBLUETOOTHKEY, bluePermission);
                }
            } else {
                initRequestOpenBluetooth();
            }
        }
    }

 /**
     * 请求打开蓝牙设备
     */
    private void initRequestOpenBluetooth() {
        Intent mIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(mIntent, Constant.REQUESTTOOPENBLUE);
     // 用enable()方法来开启,无需询问用户(无声息的开启蓝牙设备),这时就需要用到android.permission.BLUETOOTH_ADMIN权限。
     // mBluetoothAdapter.enable();
    }
  /**
     * 开启蓝牙扫描  蓝牙烧扫描需要停止这边通过延时来关闭我们的蓝牙扫描
     */
    private void startBluetoothSearch() {
        mBluetoothAdapter.startLeScan(this); // 下面扫描特定service的蓝牙设备
        handler.sendEmptyMessageDelayed(0, delayMillis);//用来关闭我们的蓝牙扫描
         //后面优化用的6以后就推荐用下面的方法搜索
       /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mBluetoothAdapter.getBluetoothLeScanner().startScan(new ScanCallback() {
                @Override
                public void onScanResult(int callbackType, ScanResult result) {
                    super.onScanResult(callbackType, result);
                }

                @Override
                public void onBatchScanResults(List<ScanResult> results) {
                    super.onBatchScanResults(results);
                }

                @Override
                public void onScanFailed(int errorCode) {
                    super.onScanFailed(errorCode);
                }
            });
        }*/
        }
今天先分享BLE蓝牙是否支持和蓝牙是否开启以及蓝牙的扫描 这边 我们蓝牙的扫描 用的之前版本的在现在推荐使用上面注释掉的方法。 别忘记权限的申请和声明 BLE蓝牙需要定位权限 。
相关标签: BLE android蓝牙