2017-05-06 170 views
0

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

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

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

回答

0

经过一番调查,终于找到了自己存储这个文件的地方。如果您查看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")); 

然后深入到环境类getUserSystemDirectory方法,你会发现usb_device_manager.xml文件通常(如果你看看系统和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