BroadcastReceiver讲解

主要通过解析一段代码来讲解BroadcastReceiver。

//创建匿名内部类    
private final BroadcastReceiver permissionReceiver = new BroadcastReceiver() {
/*这是 BroadcastReceiver 中的一个抽象方法,在接收到广播时会被调用。onReceive 方法接收两个参数:Context 和 Intent,分别表示广播的上下文和内容。*/
        @Override
        public void onReceive(Context context, Intent intent) {
/*这行代码检查接收到的广播是否是 USB 设备权限请求的广播事件。ACTION_USB_PERMISSION 是一个常量,表示 USB 设备权限请求的广播动作,确保线程安全。处理 USB 设备权限请求的逻辑:在这段代码中,permissionReceiver 广播接收器处理了 USB 设备权限请求的逻辑。当收到 USB 设备权限请求的广播时,会执行 onReceive 方法。在该方法中,会尝试从 Intent 中获取附加的 USB 设备对象,并根据权限是否被授予执行相应的操作。*/

/*多线程环境下的问题:
由于 permissionReceiver 是在主线程中执行的,如果多个 USB 设备权限请求的广播同时到达,并且同时被处理,就可能导致竞态条件。特别是在访问共享资源 device 变量时,可能会出现数据不一致或其他线程安全问题。*/
            if (ACTION_USB_PERMISSION.equals(intent.getAction())) {
/*这是一个同步块,确保在处理接收到的广播时只有一个线程可以访问关键代码部分。在这段代码中使用同步块的主要原因是为了保证 device 变量的正确性。*/
                synchronized (this) {
/*这行代码从接收到的广播 Intent 中获取附加的 USB 设备对象。UsbManager.EXTRA_DEVICE 是一个常量,表示 USB 设备对象。getParcelableExtra 方法用于获取附加在 Intent 中的 Parcelable 类型对象。*/
                    UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
/*这行代码检查 USB 设备权限是否被授予。UsbManager.EXTRA_PERMISSION_GRANTED 是一个常量,表示 USB 设备权限是否被授予。getBooleanExtra 方法用于获取附加在 Intent 中的布尔类型数据,默认值为 false。*/
                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        if (device != null) {
                            // 向 USB 设备发送 AT 指令
                            sendATCommand(device);
                        }
                    } else {
                        showToast("用户拒绝了 USB 设备的访问权限");
                    }
                }
            }
        }
    };

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值