Android 永久 USB 权限(始终允许)显示但始终无法允许权限

Android Persistent USB Permissions (Allow always) showing but failing to allow permission always

提问人:Jamie Ward 提问时间:10/27/2023 更新时间:10/27/2023 访问量:22

问:

在我的新 android 项目中,我有一个广播接收器,它可以获取 USB 设备并在需要时请求权限。我还有一个关于具有它应该识别的供应商 ID 的活动的意图过滤器。

'class UsbReceiver: BroadcastReceiver() {

private val ACTION_USB_PERMISSION = "com.app.com.USB_PERMISSION"

override fun onReceive(context: Context?, intent: Intent?) {
    val device = intent?.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
    val manager = context?.applicationContext!!.getSystemService(Context.USB_SERVICE) as UsbManager

    val mIntent = Intent(context, UsbPermissionReceiver::class.java)
    mIntent.action = ACTION_USB_PERMISSION

    val pIntent = PendingIntent.getBroadcast(context, 0, mIntent, PendingIntent.FLAG_MUTABLE)

    if (!manager.hasPermission(device))
        manager.requestPermission(device, pIntent)

    // do what I want with device here
}

}

类 UsbPermissionReceiver: BroadcastReceiver() {

override fun onReceive(context: Context?, intent: Intent?) {

    if (intent?.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false) == true) {
        val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)


        // do what I want with device here
    }
}

}`

这需要时会正确显示一个权限窗口,该窗口有一个框,上面写着“连接设备名称时始终打开 APP NAME”。如果选中此复选框,然后按允许,则下次连接设备时仍会显示该消息。在我以前的项目中,这工作正常,并保留了权限。

有什么想法吗?该代码与我的其他项目相同,并且在清单中正确引用。这很奇怪!谢谢

  • 我已经检查了清单和广播接收器
  • 意图过滤器是否正确
android android-activity android-usb android-compose

评论


答:

0赞 Rumit Patel 10/27/2023 #1

您应该会看到一个如下图所示的对话框:

enter image description here

在本例中,STM32 Virtual ComPort 是一个 USB 设备。

如果您选中该复选框,则不应要求此权限。您的问题可能有原因。

  1. 如果连接了允许的 USB 设备(即本例中的 STM32 Virtual ComPort)以外的设备,则应显示此权限对话框。

  2. 如果应用程序被强制停止、缓存被清除、存储被清除,或者在权限重置的情况下,应显示该对话框。

您可以轻松地从 UVCPermissionTest 项目获得帮助或将您的代码与 UVCPermissionTest 项目进行比较。

评论

0赞 Jamie Ward 10/27/2023
我得到了那个框,但是,当我勾选该框并按确定时,它仍然不起作用。这很奇怪,因为我以前做过。就好像较新的 android SDK 坏了一样。我将尝试在两个 SDK 版本之间复制它。