首页 > 解决方案 > 连接USB时使用意图过滤器启动活动时的Android 10堆叠USB权限

问题描述

我的设置

在 Android 10 上,权限模型发生了变化,这意味着读取 USB 设备的序列号需要明确的用户权限,请参阅:https ://developer.android.com/preview/privacy/data-identifiers#usb-串行用户权限

因此,当收到连接 USB 设备的意图时,我会自动请求读取序列号的权限(导致权限对话框:“允许 X 访问虚拟 COM 端口?”)。

权限对话框 1

为了在连接适当的 USB 设备时也能够启动应用程序,以前也可以这样做(AndroidManifest.xml):


        <activity
                android:name="MainActivity"
                android:screenOrientation="portrait"
                >

            <intent-filter>

                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

            <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/my_device_filter"
                    />

        </activity>

...这也会在连接新的 USB 设备时导致权限请求对话框(“打开 X 以处理 Com 端口?”)。

权限对话框 #2

但是,如前所述,应用程序还必须请求读取序列号的权限,这会导致第二个权限对话框。

这两个对话框现在堆叠在一起,如果同意第一个对话框(“打开 X 以处理虚拟 COM 端口?”),第二个对话框(“允许 X 访问 COM 端口?”)将自动关闭,导致功能中断。

关于如何处理这两个权限的任何建议?

标签: android-10.0android-usb

解决方案


推荐阅读