【问题标题】:How to get USB permission for android by system configuration如何通过系统配置获取安卓的USB权限
【发布时间】:2017-05-08 03:20:47
【问题描述】:

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

For app: com.aaa.app, vendorId="1111" and productId="1111", permission="true". 

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

【问题讨论】:

    标签: android permissions


    【解决方案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文件通常位于(如果你看Environment的源代码,系统和ENV变量依赖)位于

    /data/system/users/0/usb_device_manager.xml

    其中 0 是用户 ID。这可能非常适合您。如果我给应用程序 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

    【讨论】:

    • 以及如何帮助绕过权限对话框(弹出)?
    • 即使您的应用对设备没有权限,您仍然在 usb_device_manager.xml 中为您的应用提供此设备信息
    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多