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


Я пытался искать снова и снова и запутался,можем ли мы иметь контроль над USB-накопителем без укоренения телефона, если да, то как? Я попробовал следующий метод, чтобы включить и отключить разрешение, но все напрасно:

StorageManager storage = (StorageManager)getApplicationContext().getSystemService(STORAGE_SERVICE);
 Method method = storage.getClass().getDeclaredMethod("enableUsbMassStorage");
 method.setAccessible(true); 
 Object r = method.invoke(storage);

//And to disble mass storage:

StorageManager storage = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
Method method = storage.getClass().getDeclaredMethod("disableUsbMassStorage");
method.setAccessible(true);
Object r = method.invoke(storage);

Если у кого-то есть какие-либо идеи по этому поводу, пожалуйста, поделитесь своими знаниями.

Заранее благодарю.

2 3

2 ответа:

Короткий ответ на ваш вопрос- Нет . Вы не можете играть с разрешением USB mass storage программно. Вы также не найдете никаких Android-приложений, которые могут сделать это надежно для любого / всех телефонов.

По умолчанию платформа Android не позволяет сторонним приложениям программно обходить разрешения USB-накопителя. этот выбор всегда остается за пользователем, и это правильный подход. Только подумайте об этом: если бы это было разрешено, любое стороннее приложение может злоупотреблять этим разрешением и передавать данные через USB-соединение.

Подход, который вы пытались использовать, предполагает, что мы знаем названия соответствующих методов и вызываем их через рефлексию. Это будет работать для некоторых производителей оборудования, которые изменили базовую платформу и предоставили соответствующие вызовы API. Но он предполагает, что вы знаете названия этих методов, и он будет работать только на крошечном подмножестве огромного количества моделей телефонов Android. Это не сработает. на большинстве телефонов, и это, конечно, не будет работать на любом из устройств Nexus, которые имеют оригинальный исходный код ОС Android.

Вот и все.

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

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

Теперь вы можете принудительно отключить usb-накопитель, позвонив по телефону:

MountService.setUsbMassStorageEnabled(false);



//or



StorageManager.disableUsbMassStorage();



//but unfortunately, both these API are not public accessible?!