我的设置
- Pixel 3/Android 10(但在三星 Galaxy S9/Android 9 上也有同样的问题)
- 应用面向 API 29 (Android 10)
- USB 设备
在 Android 10 上,权限模型发生了变化,这意味着读取 USB 设备的序列号需要明确的用户权限,请参阅:https ://developer.android.com/preview/privacy/data-identifiers#usb-串行用户权限。
因此,当收到连接 USB 设备的意图时,我会自动请求读取序列号的权限(导致权限对话框:“允许 X 访问虚拟 COM 端口?”)。
为了在连接适当的 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 端口?”)。
但是,如前所述,应用程序还必须请求读取序列号的权限,这会导致第二个权限对话框。
这两个对话框现在堆叠在一起,如果同意第一个对话框(“打开 X 以处理虚拟 COM 端口?”),第二个对话框(“允许 X 访问 COM 端口?”)将自动关闭,导致功能中断。
关于如何处理这两个权限的任何建议?