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

Mac*_*ado 6 java usb android

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

我的意思是,一些函数将返回无论设备是否在Host,DeviceAccessory模式.

nap*_*ror 1

不是最好的答案,但一旦你有了 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 设备是否处于主机模式,如果不是,你知道它处于应用程序模式。 ..