注册广播监听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()
}
}