應用程序需要對MCE Usb設備進行操作。首先使用UsbManager的getDeviceList接口獲取USB設備列表時,引發PackageManager.PERMISSION_DENIED異常。 應用程序的確已經在AndroidManifest.xml中聲明瞭所需的權限,所以從Framework層找問題的原因。
首先看out目錄下/system/etc/permissions,發現缺少android.hardware.usb.host.xml。在device.mk中
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml
爲節約時間不重新編譯了,將該文件push到設備中,發現異常依舊。查看其他設備的權限文件,發現系統開放的設備訪問權限都被寫在了這個文件中:system/etc/permissions/handheld_core_hardware.xml。照樣添加:
<feature name="android.hardware.usb.host" />
這次再次打開應用程序,已經不再報PackageManager.PERMISSION_DENIED的異常,但是usb設備無法工作。應該是內核原因。打開內核開關對MCE、LIRC的支持:
CONFIG_LIRC=y
CONFIG_IR_LIRC_CODEC=y
CONFIG_IR_MCEUSB=y
CONFIG_LIRC_STAGING=y
static struct usb_device_id mceusb_dev_table[] = {
......
/* Formosa Industrial Computing / Beanbag Emulation Device */
{ USB_DEVICE(VENDOR_FORMOSA, 0xe018) },
{ USB_DEVICE(VENDOR_FORMOSA, 0xe042) },
/* Formosa21 / eHome Infrared Receiver */
{ USB_DEVICE(VENDOR_FORMOSA, 0xe03a) },
/* Formosa Industrial Computing AIM IR605/A */
... ...
}
通過以上作業, mce相關設備就已經添加好了,可以在apk中操作。