Démarrage d'une activité répertoriée sous «Paramètres» à partir du terminal (ou du shell adb)

13

Je souhaite démarrer cette activité depuis le terminal: com.android.settings.Settings$PowerUsageSummaryActivity

j'ai essayé

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

et voici 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 la am startcommande omet la $PowerUsageSummaryActivitypartie, donc en gros, je ne fais qu'ouvrir le menu "Paramètres" standard. comment puis-je ouvrir cette page spécifique "résumé de consommation d'énergie" à partir du terminal?

juniecho
la source
2
Avez-vous essayé de le mettre entre guillemets simples, c'est-à 'com.android.settings/.Settings$PowerUsageSummaryActivity'- dire - ou de s'échapper du même $genre com.android.settings/.Settings\$PowerUsageSummaryActivity- ce qui est le truc habituel à faire sur le shell lorsqu'il s'agit de $signes littéraux n'indiquant pas une variable?
Izzy
Que diriez-vous d'ouvrir l'activité RunLog de Tasker au-dessus du terminal? Tasker dispose d'un menu à 3 points pour ouvrir la fenêtre Journal.
Nicola Al.

Réponses:

12

Comme je l'ai écrit dans mon commentaire, certains caractères spéciaux nécessitent des précautions supplémentaires lorsque vous travaillez à l'invite du shell (ou dans les scripts shell). L'un d'eux est le $signe, qui indique généralement une variable. Si cela doit être pris à la lettre, vous devez l'échapper (ou entourer la chaîne entière de guillemets simples). Règles similaires pour les guillemets.

À quoi devrait ressembler votre commande avec un échappé $ , vous pouvez déjà trouver dans la réponse d'eldarerathis :

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

Notez la "barre oblique inverse" devant le $- c'est le signe d'échappement. Utilisez la même chose pour les guillemets ou les blancs, si votre commande en inclut certains à prendre à la lettre, par exemple

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 startcommande, voici ce qui s'est passé lors de l'analyse:

  • commander: am
  • paramètre 1: start
  • paramètre 2: -S
  • paramètre 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • a un $, interprétant: la variable $PowerUsageSummaryActivityn'est pas définie, 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 passe deux fois par le shell, vous devez donc échapper ou citer à nouveau la commande , comme ceci:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
Izzy
la source
Oh merci! oh comment pourrais-je oublier de m'échapper $ ... je suis
vraiment
Les petites choses de la vie ... Facile à ignorer :) Btw: Si cela a résolu votre problème, envisagez de marquer l'une des réponses comme "acceptée" (en cliquant sur la coche à côté) [et de voter pour l'autre :)] - donc c'est clair pour les autres personnes qui tapent dans un piège similaire :)
Izzy
oh j'ai trouvé la coche. c'est donc comme ça que j'accepte la réponse ... merci c'est la première fois que j'utilise stackexchange;)
juniecho
Vous êtes les bienvenus à tout moment :) Maintenant, vous voyez à quel point cela fonctionne bien: faites passer le mot :)
Izzy
3
Avec bash, dans mon cas, que cela a fonctionné: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Je ne sais pas pourquoi.
Firelord
5

Échappez le $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 à la place l'intention que l'écran Power Use écoute:

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

Vous pouvez trouver les intentions en regardant les <action>balises dans le fichier AndroidManifest.xml pour l'application "Paramètres" (qui peut être consultée sur GitHub ). À titre d'exemple, voici la définition d'activité pour 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>
eldarerathis
la source