7

我有一个将与 USB 设备交互的 Android 应用程序,在Android 开发人员官方文档中获取与设备通信的权限它说:

注意:如果您的应用程序使用意图过滤器在 USB 设备连接时发现它们,如果用户允许您的应用程序处理意图,它会自动获得权限。如果没有,您必须在连接到设备之前在您的应用程序中明确请求权限。

意图过滤器将在 AndroidManifest.xml 中声明,并使用包含供应商 ID 和产品 ID 的资源文件。

如果我插入我的设备,即使声明了 Intent,也不会发生任何事情。所以我必须使用同一官方文档中提到的方法,其中涉及明确请求许可。

这可行,我可以与设备通信,但碰巧用户每次启动应用程序或重新连接设备时都必须授予权限。最后,这将在每次插入设备并启动应用程序时向用户显示一条消息,要求确认,并且每次都给予相同的权限是不可取的。

因此,如果“......自动获得许可......”部分不起作用。

我如何使意图过滤器工作?
我错过了什么?
我还有其他选择吗?


这个问题:Android USB Permissions Dialog 从来没有出现过相反的问题,但该解决方案对我不起作用。
使应用程序成为系统应用程序并绕过权限对我也不起作用,如此处所述:USB open accessory permissions through a service in android


任何帮助是极大的赞赏

4

2 回答 2

7

我有同样的问题,在使用设备的 Activity 中的 AndroidManifest.xml 中这样写:

<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />

您还必须在您的 xml 资源中创建一个过滤器文件,例如 res/xml/device_filter:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <usb-device vendor-id="26214" product-id="26214" />
    </resources>

此处的供应商 ID 和产品 ID 必须以十进制形式给出 - 上面的 VID 和 PID 都是 0x0123。你看到USB设备访问弹出抑制了吗?

你不能调用 mManager.requestPermission(device, mPermissionIntent),所以你必须直接调用 mManager.openDevice(mDevice); 无需出现权限弹窗,即可正常通信。

问候, Samuel Reque samo_reque@hotmail.com

于 2013-05-22T15:48:47.577 回答
0

I don't undersand your question well but I think solution is like this..

<activity ...>
<intent-filter >
            <action android:name="android.intent.action.MAIN" />                
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/>
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
于 2013-03-06T18:53:36.277 回答