android - 尝试与配件通信时如何避免显式许可?
问题描述
我正在使用平台 API(不是附加库)将 Android 设备与 USB 主机硬件连接起来。我正在使用这个官方文档来执行连接,我可以成功建立连接并与配件通信。
我唯一的问题是您可以在屏幕截图上看到的权限对话框。每次将配件连接到平板电脑时,它都会出现。在我的情况下,用户不应该能够看到权限:
- 为了用户方便。另外,如果用户误点击取消,则无法建立通讯。
- 该应用程序始终在信息亭模式下运行。这意味着我的应用程序是唯一可见的。因此,弹出窗口永远不可见,如果允许手动授予,则用户无法授予连接到 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
}
}
解决方案
推荐阅读
- javascript - 多次更改频道名称时不会触发 rateLimit 事件侦听器
- django - Django pytest:无法测试用户页面详细信息
- reactjs - 使用 React Native 测试库对插件组件进行单元测试
- typescript - Logstash cors 问题
- python - 如何用 Pandas 确定周期
- android - 无法使用 Azure 空间锚点 Unity android 应用程序收集环境数据
- c# - 使用 CancelAfter 时如何避免任务取消后的 SetResult
- android - 如何使用 Compose 删除 AlertDialog 和标题/文本之间的填充
- javascript - 即使更新了材料表的数据,反应材料表的行数据值也不会更新
- apache-spark - 如何使用 Spark Structured Streaming 更改时区设置?