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.
Hi-speed Usb Host Controller
Android hardware usb host xml shared files: Here you can find android hardware usb host xml shared files we have found in our database. Just click file title and download link will show up. Download android hardware usb host xml free shared files from DownloadJoy and other world's most popular shared hosts. Our filtering technology ensures that only latest android hardware usb host xml files are listed.
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.
List attached USB devices in USB Host mode In this exercise, my Android phone (HTC One X) act as USB Host to list attached USB devices via USB OTG cable. Add uses-feature of 'android.hardware.usb.host', and android:minSdkVersion='12' in AndroidManifest.xml. Have you include minSdkVersion='12' and uses-feature of 'android. Download the latest Samsung driver as well asAndroid.hardware.usb.host.xml Samsung in case you have problems operating Samsung products. The Android.hardware.usb.host.xml Samsung, can be easily found out here in this site. Please subscribe to get latest info regarding Android.hardware.usb.host.xml Samsung and other software. How to Use Your Android to Communicate with Your Arduino. Courtesy of All About Circuits. How to Use Your Android to Communicate with Your Arduino. In this project, we show you how to send texts from your Android phone to your Arduino. You Will Need. Android Phone - The phone used needs to support USB Host Mode (i.e OTG Support).
2 Answers
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:
- Request permission explicitly from your application using UsbManager.requestPermission(...)
- 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.
Further to my comment, I had a look into the underlying Android code.
I have a possible answer, but with no less than four major caveats and obstacles:
- I haven't tried it, because I don't have any suitable USB devices to hand.
- You need a new permission
- The permission requires that you are a system app
- The code requires access to something not in the public API
Forget about this if deploying ordinary after-market apps!
The first prerequisite is that you have the MANAGE_USB
permission. That is described here.
However in turn the prerequisites for that are that you sign with the system key, and you install your app into /system/app.
Anyway, if you're OK with that, here's some code:
mDevice
is the device from before.
uid
is your own app's UID and you can look that up. An example of how to do that is the first answer here.
All good? No. ServiceManager
is android.os.ServiceManager
and thus isn't a public API. That, in this example, is your way to getting your hands on the IUsbManager
service (there may be other routes). Now, getting around that is beyond the scope of my answer; in the old days you could use reflection, but I don't know if you still can.
After all of those shenanigans, it looks like you don't need to request permission any more, and if you do, it will return immediately with no dialog.