Предыстория: у меня есть Android-устройство на USB-накопителе (например, RikoMagic), которое я в основном использую в режиме «без головы» Помимо прочего, я уже понял, как его отключить, используя комбинацию adb и внутренней команды «am»:
adb shell am start -n android/com.android.server.ShutdownActivity
Сейчас я пытаюсь понять, как включить и отключить поддержку USB-накопителей. Я дошел до появления окна активности USB-накопителя с помощью следующей команды:
adb shell am start -n com.android.systemui/.usb.UsbStorageActivity
К сожалению, я не смог выяснить, как отправить эквивалентное «намерение», чтобы фактически «размонтировать» или «расшарить» общий том (или «смонтировать» или «поделиться» им в этом отношении). Следующая команда ничего не делает:
adb shell am start -n com.android.systemui/.usb.UsbStorageActivity -a android.intent.action.MEDIA_UNSHARED file:///mnt/sdcard
Что я делаю неправильно? Каково волшебное заклинание монтировать / размонтировать внутреннее хранилище устройства Android?
Примечание 1: я знаю, что есть очевидная команда Linux "mount" / "umount". Однако простое подключение или отключение тома не вызовет системных функций, необходимых, например, для перезапуска или остановки приложений, которые были перемещены на SD-карту. «Umount», вероятно, в любом случае потерпит неудачу, если приложение на SD-карте все еще активно.
Примечание 2: Очевидно, есть команда «setprop», которая может включить / отключить поддержку USB-накопителя до следующей перезагрузки. Опять же, этот подход «все или ничего» - это не то, что я ищу, а возможность включать и выключать USB-накопитель в течение одного сеанса, как это можно сделать с помощью сенсорного интерфейса.
adb shell setprop sys.usb.config mass_storage
источник
Ответы:
Увы,
UsbStorageActivity
он не использует намерение включать и отключать запоминающее устройство USB, поэтому нет способа добиться этого с помощьюam
. Вместо этого он вызывает функцииStorageManager.enableUsbMassStorage
и`StorageManager.disableUsbMassStorage
выполняет свою работу. Поскольку эти функции скрыты в каркасе, также невозможно написать приложение для этого. Насколько я знаю, не существует команды для этого.Может быть возможно написать приложение, которое предлагает интерфейс командной строки и использует связанную системную службу
MountService
для вызова своейsetUsbMassStorageEnabled
функции, но это было бы не по теме для этого сайта.источник
monkey
нажать кнопку, поскольку в коде есть явная проверка, чтобы остановить тесты, случайно отключившие хранилище.service
инструмент CLI, который может вызывать методы системного обслуживания.Я попытался «StorageManager.enableUsbMassStorage» и «StorageManager.disableUsbMassStorage», чтобы включить и отключить запоминающее устройство и его работу.
Благодарю.
Эти методы являются частным методом. Итак, если вы хотите использовать их, вы должны делать это с помощью размышлений. Чтобы получить этот Storage Manager, вы можете использовать метод getSystemService (java.lang.String), который включен в действия:
И отключить хранилище:
источник