我正在构建一个需要直接使用USB设备的Android嵌入式系统。应用程序将在设备启动时启动。但是,正常访问USB设备时,我必须先请求许可。我不希望该权限弹出窗口出现。我知道有一种方法可以在用户第一次授权后使用intent-filter直接获得权限,但我不知道这是否是最理想的方式。我的设备是一个root的Android开发板,所以基本上我可以改变系统中的任何东西。我知道所有权限数据都存储在/data/system/packages.xml中,但USB权限不是真正的用户权限。我想知道是否有像/data/system/packages.xml这样的地方存储所有usb权限,如下所示:
For app: com.aaa.app, vendorId="1111" and productId="1111", permission="true".
我认为应该有这样一个地方存储这个信息,因为意图过滤器需要这个。任何人都知道我应该在系统中查看哪个文件?感谢
答案 0 :(得分:1)
经过一番调查,终于找到了我自己存储这个文件的地方。如果您查看Android源代码并找到com.android.server.usb.UsbSettingsManager(https://github.com/android/platform_frameworks_base/blob/4b1a8f46d6ec55796bf77fd8921a5a242a219278/services/usb/java/com/android/server/usb/UsbSettingsManager.java),则所有与USB相关的权限函数都在此处。然后你可以搜索mSettingsFile,你会发现一些代码行:
mSettingsFile = new AtomicFile(new File(
Environment.getUserSystemDirectory(user.getIdentifier()),
"usb_device_manager.xml"));
然后深入了解Environment类的getUserSystemDirectory方法,你会发现usb_device_manager.xml文件通常是(系统和ENV变量依赖,如果你看环境的源代码)位于
/data/system/users/0/usb_device_manager.xml
其中0是userId。这可能在你的情况下。如果我给应用程序USB许可,然后在文件中,它将显示如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<settings>
<preference package="com.xxxx.testusb">
<usb-device vendor-id="1003" product-id="9220" class="0" subclass="0" protocol="0" manufacturer-name="Unknown" product-name="BlendMicro 8MHz" serial-number="" />
</preference>
</settings>
如果您卸载此应用,则会自动删除此条目。
这是我刚才发现的更详细的解释。 https://groups.google.com/forum/#!topic/android-platform/3duEI8rFERo