当使用我的USB设备(恰好是USB MIDI控制器,即音乐键盘)和我的Android手机(OS版本5.0.1)通过USB OTG时,我目前遇到一个特定情况的问题。我能胜任Android编程,因此解决方案可能是面向消费者的解决方案,也可能是面向程序员的解决方案(即如果有人指出我正确的方向,我可以编写应用来解决问题 - 但是如果那不是必要的,那就更好了。)
我可以连接设备(Korg MicroKEY 61),并且它被众多应用程序识别,例如“MIDI Commander”和“MicroKeyPlayer”。我可以使用MicroKeyPlayer播放键盘并从中获取声音。那里没有问题。
但是,只有当您插入设备时出现的菜单中选择了相关的应用程序时,此功能才有效 - 菜单上显示“为USB设备选择应用程序”。当您从此菜单中选择应用程序时,似乎所选应用程序被授予使用USB设备的无限权限,直到它被拔出。但是,当它被拔掉时,它就会失去许可。
问题在于,如果没有拔出设备,重新插入设备,并从“选择应用...”菜单中选择新应用,似乎无法授予任何其他应用的权限。然后你回到同一条船上 - 只有一个应用程序可以访问该设备,直到它被拔掉。
这是一个问题,因为当设备被拔出时,其MIDI状态会丢失,这意味着例如调制轮功能的分配恢复到默认值。这意味着我不能,例如在MIDI Commander中将调制轮设置为“延音踏板”控制,然后切换到MicroKeyPlayer,使用该设置上的调制轮播放键盘。
我知道我可以使用外接电源集线器在手机拔出电源时保持设备处于活动状态,但这样可以解决更加纠结且不太方便的设备(在房子周围移动时携带的东西更多等等) 。),无论如何原则上我不应该使用一个。 (此外,我现在碰巧没有人可以提供。这可能会增加延迟。)
我认为应用程序开发人员最有可能在技术上有问题 - 他们应该使用UsbManager.hasPermission()检查权限,并在必要时使用UsbManager.requestPermission()动态获取权限,而不是简单地假设他们拥有它。
但是,我想知道是否可以解决这个问题。也许有一些方法可以通过编程方式将USB权限授予其他应用程序?或者也许有一些Intent可以被触发以再次调出“选择一个应用程序......”菜单,而无需拔出设备?
任何对Android USB有更好了解的人都可以确认我是否正确地看待这个问题?是与应用程序开发人员联系的唯一解决方案吗?