Android USB设备权限和意图过滤器

Ani*_*aru 6 usb android intentfilter android-permissions

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

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

Intent Filter将在AndroidManifest.xml中声明,并使用包含vendor-id和product-id的资源文件.

如果我插入我的设备没有任何反应,即使使用声明的Intent.所以我必须使用相同官方文档中提到的方法,该方法涉及明确要求许可.

这可以工作,我可以与设备通信,但是每次启动应用程序或重新连接设备时,用户都必须提供权限.最后,这将向用户发出一条消息,要求每次插入设备并启动应用程序时进行确认,并且每次都不希望给予相同的权限.

因此,如果"...自动获得许可......"部分无效.

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


这个问题:Android USB Permissions Dialog从未出现过相反的问题,但解决方案对我来说不起作用.
使应用程序成为系统应用程序并绕过权限对我来说也不会像这里提到的那样:USB通过android中的服务打开附件权限


任何帮助是极大的赞赏

小智 6

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

<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" />
Run Code Online (Sandbox Code Playgroud)

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

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <usb-device vendor-id="26214" product-id="26214" />
    </resources>
Run Code Online (Sandbox Code Playgroud)

这里的vendor-id 和product-id 必须以十进制给出——高于VID 和PID 都是0x0123。你看到USB设备访问弹出抑制了吗?

你一定不能调用mManager.requestPermission(device, mPermissionIntent),所以你必须直接调用mManager.openDevice(mDevice); 并且您可以正常通信而无需出现权限弹出消息。

问候,塞缪尔·雷克 samo_reque@hotmail.com


小智 0

我不太明白你的问题,但我认为解决方案是这样的..

<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>
Run Code Online (Sandbox Code Playgroud)