蓝牙BLE工具

本文介绍了蓝牙BLE工具的使用方法,包括单例模式获取对象、初始化操作、扫描与连接的回调机制。强调了读写操作的队列原则,需等待回调返回后才能进行下一次操作,并指出在不需要服务器确认的写入情况下,应设置适当的延时。同时提到了权限管理,尤其是蓝牙开关和定位权限的动态申请,以及如何监听蓝牙开关的广播变化。
摘要由CSDN通过智能技术生成

使用注意事项:

1.单例模式,直接getInstance()获取对象。

2.使用前需要init()。

3.回调分为两部分,一部分扫描,一部分连接:

public void setOnBleCallback(OnBleCallback onBleCallback)
public void setOnBleConnectCallback(OnBleCallback onBleConnectCallback)

4.读写间隔:

读写操作都是队列操作,需要等待操作结果返回后,才能进行下次操作,若当次操作未完成,下次操作调用时,将直接返回操作启用失败。

写入操作时,需等待服务器的确认信息,即写入回调,再进行下次写入操作。

当写入类型设置为 不需要接收服务器确认信息(PROPERTY_WRITE_NO_RESPONSE)以加快传输速度时,两次操作之间应保留 80ms ~ 100ms 或以上的延时。

5.权限,主要为蓝牙开关权限和定位权限,高版本记得动态申请:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

6.动态申请:

/**
 * 检查蓝牙权限和定位权限
 */
private void checkPermission() {
    PermissionX.init(this)
            .permissions(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.BLUETOOTH_ADMIN)
            .onExplainRequestReason(new ExplainReasonCallback() {
                @Override
                public void onExplainReason(ExplainScope scope, List<String> deniedList) {
                    scope.showRequestReasonDialog(deniedList,
                            "你需要同意以下权限才能正常使用",
                            "确认","取消");
                }
            })
            .request(new RequestCallback() {
                @Override
                public void onResult(boolean allGranted, List<String> grantedList, List<String> deniedList) {
                    if (allGranted){
                        Toast.makeText(mActivity,"权限已通过",Toast.LENGTH_SHORT).show();
                        mFirstDeviceListBean.setCheckStatus(true);
                        registerBroadcastReceiver(mActivity);
                        BleUtils.getInstance().init(mActivity);
                    }else {
                        String nonePermission = deniedList.toString();
                        Toast.makeText(mActivity,"权限未通过"+nonePermission,Toast.LENGTH_SHORT).show();
                    }
                }
            });
}

7.监听蓝牙开关的广播:

private void registerBroadcastReceiver(Context context) {
    IntentFilter intentFilter = new IntentFilter();
    // 监视蓝牙关闭和打开的状态
    intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
    context.registerReceiver(stateChangeReceiver, intentFilter);
}

private BroadcastReceiver stateChangeReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int blueState = intent.getIntExtra(BluetoothAdapter
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值