Android監(jiān)聽U盤的連接
修改AndroidManifest.xml文件。添加 uses-feature 元素來(lái)聲明您的應(yīng)用使用 android.hardware.usb.accessory 功能。
uses-feature android:name="android.hardware.usb.accessory" /
接收 U盤連接通知,需要在Activity 中的 android.hardware.usb.action.USB_ACCESSORY_ATTACHED Intent 指定 intent-filter 和 meta-data 元素對(duì)。meta-data 元素指向一個(gè)外部 XML 資源文件,該文件聲明關(guān)于要檢測(cè)的配件的識(shí)別信息。
intent-filter
action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /
/intent-filter
meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/accessory_filter" /
res/xml/accessory_filter.xml文件內(nèi)容:
?xml version="*.0" encoding="utf-8"?
resources
usb-device class="8" protocol="80" subclass="*" /
/resources
獲取與U盤通信的權(quán)限
private val usbManager by lazy { getSystemService(Context.USB_SERVICE) as UsbManager } private val accessory by lazy { intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY) as UsbAccessory? } private val usbReceiver by lazy { UsbReceiver() }val filter = IntentFilter( ACTION_USB_PERMISSION) filter.addAction( UsbManager. ACTION_USB_DEVICE_ATTACHED) filter.addAction( UsbManager. ACTION_USB_DEVICE_DETACHED) registerReceiver(usbReceiver, filter) val usbDevice = intent.getParcelableExtra Parcelable( UsbManager. EXTRA_DEVICE) as UsbDevice? if (usbDevice != null usbManager.hasPermission(usbDevice)) { //在這種情況下,不需要請(qǐng)求許可 } else { // 首先向用戶請(qǐng)求與底層USB設(shè)備通信的權(quán)限 val permissionIntent = PendingIntent.getBroadcast( this, 0, Intent( ACTION_USB_PERMISSION ), 0 ) usbManager.requestPermission( accessory, permissionIntent ) } class UsbReceiver : BroadcastReceiver() { companion object { const val ACTION_USB_PERMISSION = "com.jiaohongyun.sharedu.USB_PERMISSION" } override fun onReceive(context: Context, intent: Intent) { if (ACTION_USB_PERMISSION == intent.action) { synchronized( this) { val accessory: UsbAccessory? = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY) if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { //同意了 accessory?.apply { } } else { //拒絕了 } } } }}