Contexte: J'ai un périphérique Android à clé USB (par exemple RikoMagic) que j'exécute principalement en mode "sans tête". Entre autres choses, j'ai déjà compris comment l'arrêter via une combinaison d'adb et de la commande interne "am":
adb shell am start -n android/com.android.server.ShutdownActivity
J'essaie maintenant de comprendre comment activer et désactiver la prise en charge du stockage de masse USB. J'ai obtenu jusqu'à ce que la fenêtre d'activité de stockage USB s'affiche via la commande suivante:
adb shell am start -n com.android.systemui/.usb.UsbStorageActivity
Malheureusement, je n'ai pas été en mesure de comprendre comment envoyer l '"intention" équivalente pour réellement "démonter" ou "dissocier" le volume partagé (ou "monter" ou "partager" d'ailleurs). La commande suivante ne fait rien:
adb shell am start -n com.android.systemui/.usb.UsbStorageActivity -a android.intent.action.MEDIA_UNSHARED file:///mnt/sdcard
Qu'est-ce que je fais mal? Quelle est l'incantation magique pour monter / démonter le stockage interne d'un appareil Android?
Note 1: Je sais qu'il y a la commande évidente Linux "mount" / "umount". Cependant, le simple montage ou démontage du volume ne déclenchera pas les fonctions système vitales pour, par exemple, le redémarrage ou l'arrêt des applications qui ont été déplacées sur la carte SD. Un "umount" échouera probablement de toute façon quand une application sur la carte SD est toujours active.
Remarque 2: Apparemment, il existe une commande "setprop" qui peut activer / désactiver la prise en charge du stockage de masse USB JUSQU'AU prochain redémarrage. Encore une fois, cette approche tout ou rien n'est pas ce que je recherche, mais la possibilité d'activer et de désactiver le stockage de masse USB pendant une seule session, comme cela peut être fait par l'interface tactile.
adb shell setprop sys.usb.config mass_storage
la source
Réponses:
Hélas, le
UsbStorageActivity
n'utilise pas l'intention d'activer et de désactiver le stockage de masse USB, il n'y a donc aucun moyen d'y parvenir en utilisantam
. Il appelle plutôt les fonctionsStorageManager.enableUsbMassStorage
et`StorageManager.disableUsbMassStorage
fait son travail. Comme ces fonctions sont masquées dans le framework, il n'est pas possible non plus d'écrire une application pour ce faire. Pour autant que je sache, il n'y a aucune commande existante pour le faire.Il pourrait être possible d'écrire une application qui offre une interface de ligne de commande et utilise le service système lié
MountService
pour appeler sasetUsbMassStorageEnabled
fonction, mais ce serait hors sujet pour ce site.la source
monkey
pour cliquer sur le bouton, car le code a une vérification explicite pour cela, pour arrêter les tests de démontage accidentel du stockage.service
outil CLI qui peut appeler des méthodes de service système.J'ai essayé le "StorageManager.enableUsbMassStorage" et le "StorageManager.disableUsbMassStorage" pour activer et désactiver le stockage de masse et ses travaux.
Merci.
Ces méthodes sont des méthodes privées. Donc, si vous voulez les utiliser, vous devez le faire par réflexion. Pour obtenir ce gestionnaire de stockage, vous pouvez utiliser la méthode getSystemService (java.lang.String) incluse dans les activités:
Et pour désactiver le stockage de masse:
la source