Latar Belakang: Saya memiliki perangkat Android stick USB (mis. RikoMagic) yang kebanyakan saya jalankan dalam mode "tanpa kepala". Di antara hal-hal lain, saya sudah menemukan cara mematikannya melalui kombinasi adb dan perintah internal "am":
adb shell am start -n android/com.android.server.ShutdownActivity
Saya sekarang mencoba mencari cara untuk menghidupkan dan mematikan dukungan penyimpanan massal USB. Sejauh ini saya memiliki jendela aktivitas penyimpanan USB yang muncul melalui perintah berikut:
adb shell am start -n com.android.systemui/.usb.UsbStorageActivity
Sayangnya saya belum dapat menemukan cara mengirim "maksud" yang setara untuk benar-benar "melepaskan" atau "membatalkan berbagi" volume bersama (atau "me-mount" atau "berbagi" dalam hal ini). Perintah berikut tidak melakukan apa-apa:
adb shell am start -n com.android.systemui/.usb.UsbStorageActivity -a android.intent.action.MEDIA_UNSHARED file:///mnt/sdcard
Apa yang saya lakukan salah? Apa mantra sihir untuk memasang / melepas penyimpanan internal perangkat Android?
Catatan 1: Saya tahu ada perintah "mount" / "umount" Linux yang jelas. Namun, hanya dengan memasang atau melepas volume tidak akan memicu fungsi sistem yang vital, misalnya, memulai ulang atau menghentikan aplikasi yang telah dipindahkan ke kartu SD. "Umount" mungkin akan tetap gagal saat aplikasi di kartu SD masih aktif.
Catatan 2: Rupanya ada perintah "setprop" yang dapat mengaktifkan / menonaktifkan dukungan penyimpanan massal USB SAMPAI reboot berikutnya. Sekali lagi, pendekatan ini semua atau tidak sama sekali bukan yang saya cari tetapi kemampuan untuk mengaktifkan dan menonaktifkan penyimpanan massal USB selama satu sesi, seperti yang dapat dilakukan oleh antarmuka sentuh.
adb shell setprop sys.usb.config mass_storage
sumber
Jawaban:
Sayangnya,
UsbStorageActivity
tidak menggunakan maksud untuk mengaktifkan dan menonaktifkan penyimpanan massal USB, jadi tidak ada cara untuk mencapai ini menggunakanam
. Alih-alih memanggil fungsiStorageManager.enableUsbMassStorage
dan`StorageManager.disableUsbMassStorage
melakukan tugasnya. Karena fungsi-fungsi ini disembunyikan dalam kerangka kerja, tidak mungkin untuk menulis aplikasi untuk melakukan hal ini. Sejauh yang saya tahu, tidak ada perintah yang ada untuk melakukan ini.Mungkin saja untuk menulis aplikasi yang menawarkan antarmuka baris perintah dan menggunakan layanan sistem terikat
MountService
untuk memanggilsetUsbMassStorageEnabled
fungsinya, tetapi itu akan jauh di luar topik untuk situs ini.sumber
monkey
untuk mengklik tombol, karena kode memiliki pemeriksaan eksplisit untuk itu, untuk menghentikan tes unmount penyimpanan secara tidak sengaja.service
alat CLI yang dapat memanggil metode layanan sistem.Saya mencoba "StorageManager.enableUsbMassStorage" dan "StorageManager.disableUsbMassStorage" untuk mengaktifkan dan menonaktifkan penyimpanan massal dan kerjanya.
Terima kasih.
Metode itu adalah metode pribadi. Jadi, Jika Anda ingin menggunakannya, Anda harus melakukannya dengan refleksi. Untuk mendapatkan Storage Manager itu, Anda mungkin menggunakan metode getSystemService (java.lang.String) yang termasuk dalam aktivitas:
Dan untuk menonaktifkan penyimpanan massal:
sumber