Avvio di un'attività elencata in "Impostazioni" dal terminale (o dalla shell adb)


13

Vorrei iniziare questa attività dal terminale: com.android.settings.Settings$PowerUsageSummaryActivity

Provai

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

e questo è quello che ottengo:

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

Il problema è che il am startcomando omette la $PowerUsageSummaryActivityparte, quindi in pratica sto solo aprendo il menu "Impostazioni" standard. come posso aprire quella specifica pagina "riepilogo del consumo di energia" dal terminale?


2
Hai provato a metterlo tra virgolette singole, cioè 'com.android.settings/.Settings$PowerUsageSummaryActivity'- o sfuggire al $simile com.android.settings/.Settings\$PowerUsageSummaryActivity- che è la solita roba da fare sulla shell quando si tratta di $segni letterali che non indicano una variabile?
Izzy

Che ne dici di aprire l'attività RunLog di Tasker in cima al terminale? Tasker ha un menu a 3 punti per aprire la finestra Registro.
Nicola Al.

Risposte:


12

Come ho scritto nel mio commento, ci sono alcuni caratteri speciali che richiedono ulteriore attenzione quando si lavora al prompt della shell (o negli script della shell). Uno di questi è il $segno, che di solito indica una variabile. Se ciò dovrebbe essere preso alla lettera, devi evitarlo (o racchiudere l'intera stringa tra virgolette singole). Regole simili per le virgolette.

Come dovrebbe apparire il tuo comando con un escape $ , puoi già trovare nella risposta di eldarerathis :

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

Nota la "barra rovesciata" di fronte a $- questo è il segno di fuga. Usa lo stesso per virgolette o spazi vuoti, se il tuo comando ne include alcuni da prendere alla lettera, ad es

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

entrambi farebbero lo stesso: rendere la stringa un singolo parametro. Nell'esempio del tuo am startcomando, questo è ciò che è accaduto durante l'analisi:

  • comando: am
  • parametro 1: start
  • parametro 2: -S
  • parametro 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • ha una $, interpretazione: la variabile $PowerUsageSummaryActivitynon è impostata, quindi vuota
    • conclusione: il parametro 3 è com.android.settings/.Settings

Nota anche che se lo esegui direttamente tramite adb shell, il comando passa attraverso l'analisi della shell due volte, quindi devi scappare o citare di nuovo il comando , in questo modo:

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

Oh, grazie! oh, come potrei dimenticare di scappare $ ... sono debitamente vergognoso :)
juniecho,

Le piccole cose della vita ... Facile da trascurare :) Btw: Se questo ha risolto il problema, considera di contrassegnare una delle risposte come "accettata" (facendo clic sul segno di spunta accanto ad essa) [e vota sull'altra :)] - quindi è chiaro ad altre persone che attingono a una trappola simile :)
Izzy

oh ho trovato il segno di spunta. quindi è così che accetto la risposta ... grazie, è la prima volta che uso stackexchange;)
juniecho,

Sei sempre il benvenuto :) Ora vedi come funziona qui: spargi la voce :)
Izzy

3
Con bash, nel mio caso, solo questo ha funzionato: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Non so perché.
Firelord

5

Sfuggire al nome $della sottoclasse e dovrebbe funzionare:

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

Un'altra opzione è invece quella di inviare l'intento che la schermata di utilizzo dell'alimentazione ascolta:

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

Puoi trovare gli intenti guardando i <action>tag nel file AndroidManifest.xml per l '"applicazione" Impostazioni (che può essere visualizzata su GitHub ). Ad esempio, ecco la definizione dell'attività per 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.