Starten einer unter "Einstellungen" aufgelisteten Aktivität über das Terminal (oder die AdB-Shell)

13

Ich möchte diese Aktivität vom Terminal aus starten: com.android.settings.Settings$PowerUsageSummaryActivity

Ich habe es versucht

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

und das bekomme ich:

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

Das Problem ist, dass der am startBefehl den Teil weglässt$PowerUsageSummaryActivity , so dass ich im Grunde nur das Standardmenü "Einstellungen" öffne. Wie kann ich diese bestimmte Seite mit der Zusammenfassung des Stromverbrauchs über das Terminal öffnen?

juniecho
quelle
2
Haben Sie versucht, es in einfache Anführungszeichen setzen, das heißt 'com.android.settings/.Settings$PowerUsageSummaryActivity'- oder Flucht der $wie com.android.settings/.Settings\$PowerUsageSummaryActivity- das ist die übliche Material auf der Schale zu tun , wenn sie mit wörtlichen Umgang $Zeichen nicht eine Variable , die angibt?
Izzy
Wie wäre es, wenn Sie die RunLog-Aktivität von Tasker über das Terminal öffnen? Tasker hat ein 3-Punkt-Menü, um das Protokollfenster zu öffnen.
Nicola Al.

Antworten:

12

Wie ich in meinem Kommentar schrieb, gibt es einige Sonderzeichen, die besondere Sorgfalt erfordern, wenn Sie an der Shell-Eingabeaufforderung (oder in Shellskripten) arbeiten. Eines davon ist das $Vorzeichen, das normalerweise eine Variable anzeigt. Wenn dies wörtlich genommen werden soll, müssen Sie es maskieren (oder die gesamte Zeichenfolge in einfache Anführungszeichen setzen). Ähnliche Regeln für Anführungszeichen.

Wie Ihr Befehl sollte wie folgt aussehen mit einem entkommen $ , können Sie bereits in finden eldarerathis' Antwort :

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

Beachten Sie den "Back-Slash" vor dem $- das ist das Fluchtzeichen. Verwenden Sie dasselbe für Anführungszeichen oder Leerzeichen, wenn Ihr Befehl einige enthält, die wörtlich genommen werden sollen, z

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

Beide würden dasselbe tun: Die Zeichenfolge zu einem einzigen Parameter machen. Im Beispiel Ihres am startBefehls ist Folgendes beim Parsen passiert:

  • Befehl: am
  • Parameter 1: start
  • Parameter 2: -S
  • Parameter 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • hat eine $, interpretiert: variable $PowerUsageSummaryActivityist nicht gesetzt, also leer
    • Schlussfolgerung: Parameter 3 ist com.android.settings/.Settings

Beachten Sie auch , dass , wenn Sie diese laufen direkt über adb shellder Befehl durch Shell geht zweimal Parsen, so dass Sie entkommen müssen, oder notieren Sie den Befehl erneut , wie folgt aus :

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
Izzy
quelle
oh Danke! oh wie könnte ich vergessen zu entkommen $ ... ich bin
zutiefst
Die kleinen Dinge im Leben ... Leicht zu übersehen :) Btw: Wenn das Ihr Problem gelöst hat, markieren Sie eine der Antworten als "akzeptiert" (klicken Sie auf das Häkchen daneben) [und bewerten Sie die andere :)] - also Es ist klar für andere Leute, die in eine ähnliche Falle tappen :)
Izzy
Oh, ich habe das Häkchen gefunden. so akzeptiere ich die antwort ... danke das ich stackexchange zum ersten mal nutze;)
juniecho
Sie sind jederzeit willkommen :) Jetzt sehen Sie, wie gut es hier funktioniert: verbreiten Sie das Wort :)
Izzy
3
Mit bash, in meinem Fall nur dies gearbeitet: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Ich weiß nicht warum.
Firelord
5

Entziehen Sie den $Namen der Unterklasse und es sollte funktionieren:

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

Eine andere Möglichkeit besteht darin, stattdessen die Absicht zu senden, auf die der Bildschirm "Stromverbrauch" wartet:

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

Sie finden die Absichten, indem Sie sich die <action>Tags in der AndroidManifest.xml-Datei für die Anwendung "Einstellungen" ansehen (die auf GitHub angezeigt werden kann ). Hier ist als Beispiel die Aktivitätsdefinition für 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
quelle