Программно отключить USB-накопитель на устройствах Android

На многих устройствах Android, когда устройство подключено к USB-порту компьютера или даже к некоторым USB-устройствам для зарядки, телефон переходит в режим USB-накопителя. Когда устройство находится в этом режиме, приложения Android не могут получить доступ к SD-карте. Есть ли способ (1) определить, когда устройство находится в этом режиме, и (2) программно отключить USB-накопитель, хотя бы временно, чтобы мое приложение для Android могло получить доступ к SD-карте?

Я видел другие вопросы SO, и ответов на самом деле недостаточно (например, Android: обнаружение USB) .


person speedplane    schedule 13.09.2011    source источник
comment
Это может работать, если телефон рутирован, а текущая ОС имеет требуемый доступ к API.   -  person Prateek    schedule 23.05.2013
comment
Как сказал Николай ниже, если вы не поддерживаете только устройства до Honeycomb, не стоит пытаться сделать функцию переключения UMS. MTP, хотя многим это может не нравиться (включая меня), имеет свои положительные стороны. Например, с помощью MTP вы можете одновременно удалять файлы со своего телефона через компьютер или с вашего устройства и сразу же видеть, как изменения отражаются на вашем компьютере и устройстве. С UMS вам приходится монтировать/демонтировать каждый раз, когда вам нужно переключаться между устройством и компьютером. Таким образом, MTP предлагает вам больше гибкости.   -  person ChuongPham    schedule 11.12.2013


Ответы (3)


Вы можете обнаружить это (у вас есть ссылка), но, насколько я знаю, вы не можете подключить/отключить USB-накопитель, по крайней мере, с общедоступными API-интерфейсами SDK. В Honeycomb (3.0 и выше) USB-накопитель больше не используется для доступа к внешнему хранилищу устройства, поэтому ваше приложение и компьютер могут получить к нему одновременный доступ.

person Nikolay Elenkov    schedule 13.09.2011
comment
Правильно, вы не можете монтировать или отключать USB, если ваше приложение не является частью прошивки. - person CommonsWare; 14.09.2011

A1: Если текущее состояние Sd-карты SHARED, это означает, что она подключена к ПК в режиме MSC, вы можете проверить этот случай следующим образом:

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_SHARED.equals(state)) {
    // Sd card has connected to PC in MSC mode
}

A2: Вы можете принудительно отключить подключение к USB-накопителю, вызвав:

MountService.setUsbMassStorageEnabled(false);

or

StorageManager.disableUsbMassStorage();

но, к сожалению, оба этих API не являются общедоступными?!

person Community    schedule 14.04.2012
comment
так как получить доступ к этим API? - person ; 05.10.2012

Он блокирует массовое хранилище, используя отражение в API storageManger. Storage Manager API доступен с уровня SDK -9.

Я не могу отразить API-интерфейс Mountservice, который может ориентироваться на меньший уровень ОС. Если кто делал, дайте совет

person user1699512    schedule 03.06.2013
comment
Добро пожаловать в Stack Exchange. Вы не должны добавлять комментарии или вопросы в качестве ответа, они, скорее всего, будут удалены. Если у вас есть вопрос, задайте его, но сначала обязательно прочитайте Как задать вопрос. Чтобы подвергнуть критике автора или запросить разъяснения, оставьте комментарий под его сообщением, как только у вас будет достаточно репутации. Удаление сообщения может привести к плохим последствиям Мы больше не принимаем вопросы/ответы от этого аккаунта - person bummi; 02.08.2013