Friday, November 30, 2018

usb host mode - How to stop Android asking for permission before permitting access to USB device


I have an application running on a rooted no-name Android tablet running ICS 4.0.3 that controls a USB device via the USB host mode interface. The android.hardware.usb.host.xml file is present in /system/etc/permissions and everything works wonderfully. Except...



When I run the app for the first time following a reboot and then plug in the USB device I get a popup window saying "Allow the app APPNAME to access the USB device? [] Use by default for this USB device. Cancel OK" and I have to tap OK before it can start using the device.


I need to turn off the user confirmation so that the app can use the device straight away. How do I do this? I've seem some suggestions about using a keypress generator to simulate the user tapping the button on the screen but I'd prefer to avoid that sort of approach and set things up so that the confirmation request simply doesn't happen.


I probably can't get the supplier to do a custom kernel build for me, but I should be able to get the firmware signing key from them so I can sign my app as a system app, if that will help.


One associated problem: ticking the "Use by default for this USB device" box doesn't appear to help - if I unplug and replug the device then I get the confirmation prompt again. I have noticed in this situation that the device number in /dev/bus/usb/001/ changes each time I unplug and replug (001, 002, 003 etc) which perhaps explains this particular problemette.



Answer



This question and answer is basically a duplicate of
https://stackoverflow.com/a/15151075/588476
See the above link for an example program and more in depth discussion.


As far as I know, there are two ways to get the USB permission box popup:




  1. Request permission explicitly from your application using UsbManager.requestPermission(...)

  2. Register an intent-filter on your accessory and let the system ask for permission when the device is attached


In the case of 1 I have found that the checkbox on the popup to remember the permission has no effect.


For me, I removed all code related to permissions from my software and simply put the intent-filter in my manifest. When the USB device is plugged in, if it hasn't already been granted permission then the USB permission box will popup. If the user clicks OK without checking the remember box, then the box will popup again the next time the device is connected. However if the user checks the box and presses OK then the box should never display again (unless the software is uninstalled and then reinstalled).


I'm not sure if there is a bug somewhere related to your device showing up as /dev/bus/usb/001 and then 002 etc - let me know if you are using the intent-filter, as without that the remember checkbox will do nothing.


I do not know of any way that you can avoid the permission popup altogether. I suspect there is no way to do it without digging into the android code like you said.


No comments:

Post a Comment

samsung galaxy s 2 - Cannot restore Kies backup after firmware upgrade

I backed up my Samsung Galaxy S2 on Kies before updating to Ice Cream Sandwich. After the upgrade I tried to restore, but the restore fails ...