1

我目前在通过 USB OTG 与我的 Android 手机(操作系统版本 5.0.1)一起使用我的 USB 设备(恰好是 USB MIDI 控制器,即音乐键盘)时遇到一个特定场景的问题。我精通 Android 编程,因此解决方案可能是面向消费者的解决方案,也可能是面向程序员的解决方案(即,如果有人指出我正确的方向,我可以编写一个应用程序来解决问题 - 但如果这没有必要,那就更好了)。

我能够连接设备(Korg MicroKEY 61),它被许多应用程序识别,例如“MIDI Commander”和“MicroKeyPlayer”。我可以使用 MicroKeyPlayer 弹奏键盘并从中获取声音。那里没有问题。

但是,这只适用于从插入设备时出现的菜单中选择了相关应用程序 - 显示“为 USB 设备选择应用程序”的菜单。当您从此菜单中选择一个应用程序时,所选应用程序似乎被授予使用 USB 设备的无限权限,直到它被拔出。但是,当它被拔出时,它会失去权限。

问题是,如果不拔下设备、重新插入并从“选择应用程序...”菜单中选择新应用程序,似乎无法授予任何其他应用程序的权限。然后你又回到了同一条船上——只有一个应用程序可以访问设备,直到它被拔掉。

这是一个问题,因为当设备拔出时,它的 MIDI 状态会丢失,这意味着调制轮功能的分配会回到默认值。这意味着我不能在 MIDI Commander 中将调制轮设置为“延音踏板”控件,然后切换到 MicroKeyPlayer 以在该设置上使用调制轮弹奏键盘。

我知道我可以使用外部供电集线器在手机拔掉电源时让设备保持活动状态,但这会导致更容易缠结且不太方便的装备(在房子周围移动时要携带更多的东西等),无论如何,原则上我不应该使用一个。(而且我现在手头也没有。而且它可能会增加延迟。)

我认为应用程序开发人员很可能在技术上存在错误 - 他们应该使用 UsbManager.hasPermission() 检查权限,并在必要时使用 UsbManager.requestPermission() 动态获取权限,而不是简单地假设他们有它。

但是,我想知道是否有办法解决这个问题。也许有某种方法可以以编程方式将 USB 权限授予另一个应用程序?或者也许有一些 Intent 可以被触发以再次调出“选择应用程序...”菜单而不拔掉设备?

任何人都可以更好地了解 Android USB 确认我是否以正确的方式看待这个问题?是联系应用程序开发人员的唯一解决方案吗?

4

0 回答 0