提问人:Jamie Ward 提问时间:10/27/2023 更新时间:10/27/2023 访问量:22
Android 永久 USB 权限(始终允许)显示但始终无法允许权限
Android Persistent USB Permissions (Allow always) showing but failing to allow permission always
问:
在我的新 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”。如果选中此复选框,然后按允许,则下次连接设备时仍会显示该消息。在我以前的项目中,这工作正常,并保留了权限。
有什么想法吗?该代码与我的其他项目相同,并且在清单中正确引用。这很奇怪!谢谢
- 我已经检查了清单和广播接收器
- 意图过滤器是否正确
答:
0赞
Rumit Patel
10/27/2023
#1
您应该会看到一个如下图所示的对话框:
在本例中,STM32 Virtual ComPort 是一个 USB 设备。
如果您选中该复选框,则不应要求此权限。您的问题可能有原因。
如果连接了允许的 USB 设备(即本例中的 STM32 Virtual ComPort)以外的设备,则应显示此权限对话框。
如果应用程序被强制停止、缓存被清除、存储被清除,或者在权限重置的情况下,应显示该对话框。
您可以轻松地从 UVCPermissionTest 项目获得帮助或将您的代码与 UVCPermissionTest 项目进行比较。
评论
0赞
Jamie Ward
10/27/2023
我得到了那个框,但是,当我勾选该框并按确定时,它仍然不起作用。这很奇怪,因为我以前做过。就好像较新的 android SDK 坏了一样。我将尝试在两个 SDK 版本之间复制它。
评论