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

13

Me gustaría comenzar 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, por lo que básicamente solo estoy abriendo el menú estándar "Configuración". ¿Cómo puedo abrir esa página específica de "resumen de uso de energía" desde la terminal?

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

Respuestas:

12

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

Cómo debería verse su comando con un escape $ , ya puede encontrar en eldarera esta respuesta :

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

Tenga en cuenta la "barra diagonal inversa" en frente de $- esa es la señal de escape. Use lo mismo para las comillas o espacios en blanco, si su comando incluye algunos para tomarlos literalmente, por ej.

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:

  • mando: am
  • parámetro 1: start
  • parámetro 2: -S
  • parámetro 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • tiene una $interpretación: la variable $PowerUsageSummaryActivityno está establecida, por lo que está vacía
    • conclusión: el parámetro 3 es com.android.settings/.Settings

Tenga en cuenta también que si ejecuta esto directamente adb shell, 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'
Izzy
fuente
¡Oh gracias! oh, ¿cómo podría olvidar escapar $ ... estoy debidamente avergonzado :)
juniecho
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 votando la otra :)] - así está claro para otras personas que aprovechan una trampa similar :)
Izzy
Oh, encontré la marca de verificación. así que así es como acepto la respuesta ... gracias, esta es la primera vez que uso stackexchange;)
juniecho
De nada en cualquier momento :) Ahora ves lo bien que funciona aquí: corre la voz :)
Izzy
3
Con fiesta, en mi caso, sólo esto funcionó: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. No se porque.
Señor del fuego
5

Escápese $en el 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" Configuración (que se puede ver en GitHub ). Como ejemplo, aquí está la definición de actividad para 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
fuente