Iniciar una actividad enumerada en "Configuración" desde la terminal (o shell adb)

Me gustaría iniciar esta actividad desde la terminal:com.android.settings.Settings$PowerUsageSummaryActivity

Lo intenté

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

y esto es lo que obtengo:

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

El problema es que el am startcomando omite la $PowerUsageSummaryActivityparte, así que básicamente solo estoy abriendo el menú estándar de "Configuración". ¿Cómo puedo abrir esa página específica de "resumen de uso de energía" desde la terminal?

¿Ha intentado ponerlo entre comillas simples, es decir 'com.android.settings/.Settings$PowerUsageSummaryActivity', o escapar , $que com.android.settings/.Settings\$PowerUsageSummaryActivityes lo que se suele hacer en el shell cuando se trata de $signos literales que no indican una variable?
¿Qué tal abrir la actividad RunLog de Tasker en la parte superior desde la terminal? Tasker tiene un menú de 3 puntos para abrir la ventana de registro.

Respuestas (2)

Como escribí en mi comentario, hay algunos caracteres especiales que necesitan un cuidado especial cuando se trabaja en el indicador de shell (o en scripts de shell). Uno de ellos es el $signo, que suele indicar una variable. Si eso debe tomarse literalmente, debe escaparlo (o encerrar la cadena completa entre comillas simples). Reglas similares para las comillas.

Cómo debería verse su comando con un escape $ , ya puede encontrarlo en la respuesta de eldarerathis :

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

Tenga en cuenta la "barra invertida" delante de $-- esa es la señal de escape. Use lo mismo para comillas o espacios en blanco, si su comando incluye algunos que deben tomarse literalmente, por ejemplo

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

ambos harían lo mismo: convertir la cadena en un solo parámetro. En el ejemplo de su am startcomando, esto es lo que sucedió al analizar:

  • dominio:am
  • parámetro 1:start
  • parámetro 2:-S
  • parámetro 3:com.android.settings/.Settings$PowerUsageSummaryActivity
    • tiene un $, interpretando: la variable $PowerUsageSummaryActivityno está configurada, por lo que está vacía
    • conclusión: el parámetro 3 escom.android.settings/.Settings

Tenga en cuenta también que si ejecuta esto directamente a través adb shellde , el comando pasa por el análisis de Shell dos veces, por lo que debe escapar o citar el comando nuevamente , así:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
¡Oh gracias! oh, ¿cómo podría olvidar escapar $ ... estoy debidamente avergonzado :)
Las pequeñas cosas de la vida... Fácil de pasar por alto :) Por cierto: si eso resolvió su problema, considere marcar una de las respuestas como "aceptada" (haciendo clic en la marca de verificación junto a ella) [y vote a favor de la otra :)] -- entonces está claro para otras personas que aprovechan una trampa similar :)
Oh, encontré la marca de verificación. así es como acepto la respuesta... gracias, esta es la primera vez que uso stackexchange;)
De nada :) Ahora ves lo bien que funciona aquí: pasa la voz :)
Con bash, en mi caso, solo funcionó esto: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. No sé por qué.

Escape del $nombre de la subclase y debería funcionar:

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

Otra opción es enviar la intención que la pantalla de uso de energía escucha:

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

Puede encontrar las intenciones mirando las <action>etiquetas en el archivo AndroidManifest.xml para la "aplicación" de configuración (que se puede ver en GitHub ). Como ejemplo, aquí está la definición de actividad para el 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>