Можно ли отключить 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 ответа:
Короткий ответ на ваш вопрос- Нет . Вы не можете играть с разрешением 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?!