如何通过系统配置获得android的USB权限

如何通过系统配置获得android的USB权限,android,permissions,Android,Permissions,我正在构建一个Android嵌入式系统,它需要直接使用USB设备。当设备启动时,应用程序将启动。但是,当正常访问USB设备时,我必须首先请求许可。我不希望弹出许可。我知道有一种方法可以在用户第一次授权后直接获得权限,但我不知道这是否是最理想的方法。我的设备是根安卓开发板,所以基本上我可以改变系统中的任何东西。我知道所有权限数据都存储在/data/system/packages.xml中,但USB权限不是真正的用户权限。我想知道是否有像/data/system/packages.xml这样的地方存

我正在构建一个Android嵌入式系统,它需要直接使用USB设备。当设备启动时,应用程序将启动。但是,当正常访问USB设备时,我必须首先请求许可。我不希望弹出许可。我知道有一种方法可以在用户第一次授权后直接获得权限,但我不知道这是否是最理想的方法。我的设备是根安卓开发板,所以基本上我可以改变系统中的任何东西。我知道所有权限数据都存储在/data/system/packages.xml中,但USB权限不是真正的用户权限。我想知道是否有像/data/system/packages.xml这样的地方存储所有usb权限,如下所示:

For app: com.aaa.app, vendorId="1111" and productId="1111", permission="true". 
<?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>

我认为应该有这样一个地方来存储这些信息,因为意图过滤器需要这些信息。有人知道我应该在系统中查看哪个文件吗?谢谢

经过一番调查,我终于找到了这个文件存放的地方。如果查看Android源代码并找到com.Android.server.usb.UsbSettingsManager,所有与usb相关的权限函数都在这里。然后您可以搜索mSettingsFile,您将找到一些代码行:

mSettingsFile = new AtomicFile(new File(
            Environment.getUserSystemDirectory(user.getIdentifier()),
            "usb_device_manager.xml"));
然后深入研究环境类getUserSystemDirectory方法,如果查看位于的环境源代码,您会发现usb_device_manager.xml文件通常依赖于系统和环境变量

/data/system/users/0/usb\u device\u manager.xml

其中0是用户标识。这对你来说可能非常重要。如果我给应用程序USB许可,那么在文件中,它将显示如下:

For app: com.aaa.app, vendorId="1111" and productId="1111", permission="true". 
<?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>
如果卸载此应用,则此条目将自动删除


这是我刚才找到的一个更详细的解释

绕过权限对话框弹出窗口又有什么帮助呢?即使你的应用程序没有该设备的权限,你的应用程序的usb_device_manager.xml中仍然有该设备信息