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 start
commande omet la $PowerUsageSummaryActivity
partie, 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?
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- dire - ou de s'échapper du même$
genrecom.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?Réponses:
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 :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 exempleles deux feraient la même chose: faire de la chaîne un paramètre unique. Dans l'exemple de votre
am start
commande, voici ce qui s'est passé lors de l'analyse:am
start
-S
com.android.settings/.Settings$PowerUsageSummaryActivity
$
, interprétant: la variable$PowerUsageSummaryActivity
n'est pas définie, donc videcom.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:la source
adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'
. Je ne sais pas pourquoi.Échappez le
$
dans le nom de la sous-classe et cela devrait fonctionner:Une autre option consiste à envoyer à la place l'intention que l'écran Power Use écoute:
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é pourSettings$PowerUsageSummaryActivity
:la source