Android Honeycomb 3.2 обнаруживает соединение MTP через USB

Я видел другие сообщения об обнаружении USB-соединения, но они не говорили о MPT конкретно и просто более общее обнаружение, поэтому я решил, что я спрошу конкретно о MTP.

Я подключаю свой Xoom к компьютеру через USB, и я хочу, чтобы мое приложение записывало файл, когда установлено соединение 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 Connected/Disconnected, вероятно, будет работать для меня, хотя, как я видел в некоторых других сообщениях, это не представляется возможным.

Спасибо!

Ответ 1

Мне было интересно то же самое, и я придумал альтернативу:

Я проверяю состояние batery. Существует намерение, называемое 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_AC и BATTERY_PLUGGED_USB

Итак, с этой трансляцией вы можете узнать, был ли подключен смартфон к USB, даже если он использует протокол MTP.

Чтобы узнать, отключен ли смартфон, вам нужно проверить, когда значение EXTRA_PLUGGED изменяется с BATTERY_PLUGGED_USB на 0

Ответ 2

Слушайте эту широковещательную рассылку android.hardware.usb.action.USB_STATE Я ее протестировал, и она работает с устройством PTP или MTP. есть булевский дополнительный "подключенный", который скажет вам, подключен ли USB-кабель или нет.