如何通过系统配置获取Android的USB权限

时间:2017-05-06 19:04:24

标签: android permissions

我正在构建一个需要直接使用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". 

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

1 个答案:

答案 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