不是最好的答案,但一旦你有了 UsbManager,你也许就能找到答案。通常,我相信这个 UsbManager 是使用 Context 创建的,但看起来您正在切换模式,因此您希望可以获得一个 UsbManager 实例,m
在本例中:
UsbManager m = createManagerSomehow
对于配件模式,只有一个回调。如果返回一个,那么您就知道它是附件。
m.getAccessoryList()
所以我想这样的事情可能会起作用:
if(m.getAccessoryList().size() > 0)
accessoryMode = true;
Run Code Online (Sandbox Code Playgroud)
对于主机,如果您有 UsbDevicedevice
或 String,deviceName
您可以使用相同的 UsbManagerm
函数来查看它是否包含该设备。
if(m.getDeviceList().containsValue(device))
hostMode = true;
Run Code Online (Sandbox Code Playgroud)
或者
if(m.getDeviceList().containsKey(deviceName))
hostMode = true;
Run Code Online (Sandbox Code Playgroud)
我不知道它Device
是什么,但如果以上都不成立,那么您就知道它只是一个设备。您实际上并不需要下面的这个布尔变量,因为您还有其他两个。它只是为了帮助我通过状态逻辑进行解释。
if(!hostMode && !accessoryMode)
deviceMode = true
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。查看 UsbManager 以获取更多文档,只需在页面中搜索主机和附件即可。
http://developer.android.com/reference/android/hardware/usb/UsbManager.html
注意:当你说你在评论中切换模式时,我有点困惑。它与我上面进行的 Accessory 调用冲突,可能无法工作,但我会做什么(如果你不需要deviceMode
),然后只需检查 USB 设备是否处于主机模式,如果不是,你知道它处于应用程序模式。 ..