Android广播监听usb插拔状态

注册广播监听usb的挂载状态,过滤 vid 和 pid,以下是源码:

class IdUsbManager private constructor() {
    val pid = 50010
    val vid = 1024
    private var mIdUSBManagerListener: IdUSBManagerListener? = null

    companion object {
        private val mInstance: IdUsbManager by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
            IdUsbManager()
        }

        fun getInstance() = mInstance
    }

    private val usbMgrReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val action = intent.action
            if (UsbManager.ACTION_USB_DEVICE_ATTACHED == action) {
                val device =
                    intent.getParcelableExtra<Parcelable>(UsbManager.EXTRA_DEVICE) as UsbDevice
                Log.e(this.javaClass.name,"IdUsbManager USB接入 ${device.vendorId} ${device.productId}")
                if (device.vendorId == vid && device.productId == pid) {
                    //USB接入
                    mIdUSBManagerListener?.let {
                        it.onUSBArrived()
                    }
                }
            } else if (UsbManager.ACTION_USB_DEVICE_DETACHED == action) {
                val device =
                    intent.getParcelableExtra<Parcelable>(UsbManager.EXTRA_DEVICE) as UsbDevice
                Log.e(this.javaClass.name,"IdUsbManager USB被拔出 ${device.vendorId} ${device.productId}")
                if (device.vendorId == vid && device.productId == pid) {
                    //USB被拔出
                    mIdUSBManagerListener?.let {
                        it.onUSBRemoved()
                    }
                }
            }
        }
    }

    //注册监听
    fun registerUSBPermissionReceiver(context: Context?): Boolean {
        context?.let {
            val filter = IntentFilter()
            //filter.addAction(ACTION_USB_PERMISSION)
            filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
            filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
            context!!.registerReceiver(usbMgrReceiver, filter)
            return true
        }
        return false
    }

    //移除广播
    fun unRegisterUSBPermissionReceiver(context: Context?) {
        context?.let {
            it.unregisterReceiver(usbMgrReceiver)
        }
    }

    fun setIdUSBManagerListener(listener: IdUSBManagerListener): IdUsbManager {
        this.mIdUSBManagerListener = listener
        return this
    }

    interface IdUSBManagerListener {
        fun onUSBArrived()
        fun onUSBRemoved()
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值