13 votes

Démarrage d'une activité listée sous "Paramètres" depuis le terminal (ou le shell adb)

Je voudrais commencer cette activité à partir du terminal : com.android.settings.Settings$PowerUsageSummaryActivity

J'ai essayé

am start -S com.android.settings/.Settings$PowerUsageSummaryActivity

et voilà ce que j'obtiens :

Stopping: com.android.settings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings }

Le problème est que am start commande omet el $PowerUsageSummaryActivity donc, en gros, je n'arrive qu'à ouvrir le menu standard "Paramètres". Comment puis-je ouvrir la page spécifique "power usage summary" à partir du terminal ?

12voto

Milner Points 533

Comme je l'ai écrit dans mon commentaire, certains caractères spéciaux nécessitent une attention particulière lorsque l'on travaille à l'invite du shell (ou dans des scripts shell). L'un d'eux est le caractère $ qui indique généralement une variable. S'il doit être pris au sens littéral, vous devez l'échapper (ou entourer la chaîne entière de guillemets simples). Règles similaires pour les guillemets.

A quoi devrait ressembler votre commande avec un s'est échappé $ que vous pouvez déjà trouver dans réponse d'eldarathis :

shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity

Notez la barre oblique inversée devant le nom de l'entreprise. $ -- c'est le signe d'évasion. Faites de même pour les guillemets ou les blancs, si votre commande en comporte certains à prendre au pied de la lettre, par ex.

myscript.sh first\ parameter\!
myscript.sh "first parameter!"

les deux feraient la même chose : faire de la chaîne un paramètre unique. Dans l'exemple de votre am start c'est ce qui s'est passé lors de l'analyse :

  • commandement : am
  • paramètre 1 : start
  • paramètre 2 : -S
  • paramètre 3 : com.android.settings/.Settings$PowerUsageSummaryActivity
    • a un $ interprétation : variable $PowerUsageSummaryActivity n'est pas défini, donc vide
    • conclusion : le paramètre 3 est com.android.settings/.Settings

Notez également que si vous l'exécutez directement via adb shell la commande est analysée deux fois par l'interpréteur de commandes. Vous devez donc échapper à la commande ou la citer. à nouveau comme ceci :

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'

6voto

David Negron Points 971

Échapper à la $ dans le nom de la sous-classe et cela devrait fonctionner :

shell@android:/ # am start -S com.android.settings/.Settings\$PowerUsageSummaryActivity
Starting: Intent { cmp=com.android.settings/.Settings$PowerUsageSummaryActivity }
shell@android:/ #

Une autre option consiste à envoyer l'intention que l'écran d'utilisation de l'énergie écoute :

shell@android:/ # am start -a android.intent.action.POWER_USAGE_SUMMARY

Vous pouvez trouver les intents en regardant le fichier <action> dans le fichier AndroidManifest.xml pour les paramètres "application" (qui peuvent être consulté sur GitHub ). À titre d'exemple, voici la définition de l'activité pour l'activité Settings$PowerUsageSummaryActivity :

<activity android:name="Settings$PowerUsageSummaryActivity"
        android:label="@string/power_usage_summary_title"
        android:uiOptions="none"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="com.android.settings.SHORTCUT" />
    </intent-filter>
    <!-- Some other stuff here... -->
</activity>

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X