首页 > 解决方案 > 尝试与配件通信时如何避免显式许可?

问题描述

我正在使用平台 API(不是附加库)将 Android 设备与 USB 主机硬件连接起来。我正在使用这个官方文档来执行连接,我可以成功建立连接并与配件通信。

我唯一的问题是您可以在屏幕截图上看到的权限对话框。每次将配件连接到平板电脑时,它都会出现。在我的情况下,用户不应该能够看到权限:

  1. 为了用户方便。另外,如果用户误点击取消,则无法建立通讯。
  2. 该应用程序始终在信息亭模式下运行。这意味着我的应用程序是唯一可见的。因此,弹出窗口永远不可见,如果允许手动授予,则用户无法授予连接到 USB 附件事件的权限。

在此处输入图像描述

请,如果有人知道我怎样才能避免弹出这个权限,或者有办法以编程方式授予权限。

===

他们在文档中说

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

从这个引用看来,必须有一种方法可以自动接收权限,而不是明确地请求它。我不知道该怎么做。

==

一些额外的代码。

在 onCreate

fun startInitializingStreams() {
    permissionIntent = PendingIntent.getBroadcast(context, 0, Intent(ACTION_USB_PERMISSION), 0)
    val filter = IntentFilter(ACTION_USB_PERMISSION)
    filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED)
    filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED)

    logd("CREATE: register ${android.os.Process.myPid()}")
    context.registerReceiver(usbReceiver, filter)
}

在 onResume

  if (context.app.usbManager.hasPermission(accessory)) {
        openAccessory(accessory)
    } else {
        if (!permissionRequestPending) {
            context.app.usbManager.requestPermission(accessory, permissionIntent)
            permissionRequestPending = true
        }
    }

标签: androidusbaccessory

解决方案


推荐阅读