13 votos

Iniciar una actividad listada en "Ajustes" desde el terminal (o adb shell)

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

He intentado

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 am start comando omite el $PowerUsageSummaryActivity parte, así que básicamente sólo tengo abierto el menú estándar de "Configuración". ¿Cómo puedo abrir esa página específica de "resumen de uso de energía" desde el terminal?

2 votos

¿Has probado a ponerlo entre comillas simples, es decir 'com.android.settings/.Settings$PowerUsageSummaryActivity' -- o escapar de la $ como com.android.settings/.Settings\$PowerUsageSummaryActivity -- que es lo que se suele hacer en la cáscara cuando se trata de literales $ signos no indicando una variable?

0 votos

¿Qué tal abrir la actividad RunLog de Tasker en la parte superior desde el terminal? Tasker tiene un menú de 3 puntos para abrir la ventana de registro.

12voto

Izzy Puntos 45544

Como escribí en mi comentario, hay algunos caracteres especiales que necesitan un cuidado extra cuando se trabaja en el prompt del shell (o en los scripts del shell). Uno de ellos es el $ que suele indicar una variable. Si hay que tomarlo literalmente, hay que escaparlo (o encerrar toda la cadena entre comillas simples). Reglas similares para las comillas.

Cómo debería ser su comando con un se ha escapado $ ya se puede encontrar en Respuesta de eldarerathis :

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

Obsérvese la "barra invertida" delante del $ -- esa es la señal de escape. Utilice lo mismo para las comillas o los 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 único parámetro. En el ejemplo de su am start esto es lo que ocurrió al analizarlo:

  • comando: am
  • parámetro 1: start
  • parámetro 2: -S
  • parámetro 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • tiene un $ , interpretando: variable $PowerUsageSummaryActivity no está configurado, por lo que está vacío
    • conclusión: el parámetro 3 es com.android.settings/.Settings

Tenga en cuenta también que si ejecuta esto directamente a través de adb shell El comando pasa dos veces por el análisis del shell, por lo que hay que escapar o entrecomillar el comando de nuevo así:

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

0 votos

Oh gracias! oh como pude olvidar escapar $... estoy debidamente avergonzado :)

0 votos

Las pequeñas cosas de la vida... Fácil de pasar por alto :) Por cierto: si eso ha resuelto tu problema, considera marcar una de las respuestas como "aceptada" (haciendo clic en la marca de verificación junto a ella) [y votar la otra :)] - para que quede claro para otras personas que caigan en una trampa similar :)

0 votos

Oh he encontrado la marca de verificación. así es como acepto la respuesta... gracias es la primera vez que uso stackexchange ;)

6voto

David Negron Puntos 971

Escapar de la $ 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 en su lugar la intención que escucha la pantalla de Uso de la Energía:

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

Puede encontrar los intentos mirando el <action> en el archivo AndroidManifest.xml para la "aplicación" de Configuración (que puede ser visto en GitHub ). A modo de ejemplo, aquí está la definición de la 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>

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X