是否可以以编程方式识别USB通信模式?

时间:2015-05-20 20:43:30

标签: java android usb

有没有办法以编程方式识别当前的USB工作模式?

我的意思是,如果设备处于HostDeviceAccessory模式,某些功能会返回。

1 个答案:

答案 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设备是否是主机模式,如果不是你知道它处于申请模式......