有没有办法以编程方式识别当前的USB工作模式?
我的意思是,如果设备处于Host
,Device
或Accessory
模式,某些功能会返回。
答案 0 :(得分:1)
不是最好的答案,但是一旦你有了UsbManager,你就可以搞清楚了。通常这个UsbManager是使用我认为的上下文创建的,但看起来你正在切换模式,所以你希望能得到一个UsbManager实例,在这种情况下m
:
UsbManager m = createManagerSomehow
对于配件模式,这只有一个回调。如果这返回一个,那么你知道它是附件。
m.getAccessoryList()
所以我在想这样的事可能有用:
if(m.getAccessoryList().size() > 0)
accessoryMode = true;
对于Host,如果您有UsbDevice device
或String deviceName
,您可以使用相同的UsbManager m
函数来查看它是否包含该设备。
if(m.getDeviceList().containsValue(device))
hostMode = true;
或
if(m.getDeviceList().containsKey(deviceName))
hostMode = true;
我不知道Device
是什么,但如果以上都不是真的那么你知道它只是一个设备。你下面不需要这个布尔变量,因为你有另外两个。它只是通过状态逻辑来帮助我解释。
if(!hostMode && !accessoryMode)
deviceMode = true
希望这会有所帮助。查看UsbManager以获取更多文档,只需在主页和附件页面中搜索。
http://developer.android.com/reference/android/hardware/usb/UsbManager.html
注意:当你说你在评论中切换模式时,我有点困惑。它与我上面的附件调用冲突,可能不起作用,但我会做什么(如果你不需要deviceMode
)那么只检查usb设备是否是主机模式,如果不是你知道它处于申请模式......