【问题标题】:Android Honeycomb 3.2 detect MTP connection via USBAndroid Honeycomb 3.2 通过 USB 检测 MTP 连接
【发布时间】:2011-11-03 05:20:36
【问题描述】:

我看到其他关于检测 USB 连接的帖子,但他们没有专门讨论 MPT,只是更一般的检测,所以我想我会专门询问 MTP。

我正在通过 USB 将我的 Xoom 连接到计算机,并且我希望我的应用程序在 MTP 连接建立时写入一个文件。当 USB 断开且 MTP 服务器停止时,我想写出另一个文件。

所以我想同时检测已连接和未连接的情况。发生这种情况时,我似乎找不到任何发送的意图。

我在 android.developer 上看到了一些测试,例如:

ACTION_MEDIA_SHARED

ACTION_UMS_CONNECTED

ACTION_UMS_DISCONNECTED

但这些用于 USB 大容量存储,Xoom 执行 MTP 而不是 USB 大容量存储。

当您看到 logcat 输出为 USB 连接以及 MTP 服务器启动和停止时,这应该是可能的。

D/Vold (85):USB 已断开

D/Tethering(155):InitialState.processMessage what=4

D/Tethering(155): sendTetherStateChangedBroadcast 0, 0, 0

D/MtpService(2674): 停止 MTP 服务器

D/Tethering(155): sendTetherStateChangedBroadcast 1, 0, 0

D/Tethering(155): interfaceAdded :usb0

D/MtpService(2674): addStorageLocked 65537 /mnt/sdcard

D/MtpService(2674): 启动 MTP 服务器

D/MtpService(2674): addStorageLocked 65537 /mnt/sdcard

D/Vold (85):USB 已连接

有人知道我怎样才能实现我的目标吗?即使是检测 USB 连接/断开连接的能力也可能对我有用,尽管正如我在其他一些帖子中看到的那样,这似乎是不可能的。

谢谢!

【问题讨论】:

    标签: android usb


    【解决方案1】:

    我想知道同样的事情,我想出了一个替代方案:

    我检查电池状态。当电池发生事件时,会调用一个名为 ACTION_BATTERY_CHANGED 的意图。在这个意图中,有一些额外的字段包含一些信息。其中之一是EXTRA_PLUGGED

    Indicating whether the device is plugged in to a power source; 0 means it is on battery, other constants are different types of power sources.
    

    其他常量是BATTERY_PLUGGED_ACBATTERY_PLUGGED_USB

    因此,通过此广播,您可以知道智能手机是否已插入 USB,即使它使用 MTP 协议。

    要知道智能手机是否已拔出,您只需检查EXTRA_PLUGGED 值何时从BATTERY_PLUGGED_USB 更改为0

    【讨论】:

    • 这个不适用于有专用充电器的设备。
    • 当电源连接不正常时,USB 连接不稳定时也无法进行诊断。
    【解决方案2】:

    收听此广播android.hardware.usb.action.USB_STATE 我已经对其进行了测试,它适用于支持 PTP 或 MTP 的设备。有一个额外的布尔值“已连接”会告诉您 USB 电缆是否已连接。

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 2013-12-26
      • 1970-01-01
      • 2015-03-13
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多