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

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

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

Ответ 1

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

Ответ 2

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);

или

StorageManager.disableUsbMassStorage();

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

Ответ 3

Он блокирует массовое хранение, используя отражение на storageManger api. Диспетчер хранения api доступен с уровня sdk -9.

Я не могу отразить APM Mountservice, который может ориентироваться на меньший уровень os. Если кто-либо это сделал, пожалуйста, дайте советы