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 start
comando omite la $PowerUsageSummaryActivity
parte, 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?
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 start
comando, esto es lo que sucedió al analizar:
am
start
-S
com.android.settings/.Settings$PowerUsageSummaryActivity
$
, interpretando: la variable $PowerUsageSummaryActivity
no está configurada, por lo que está vacíacom.android.settings/.Settings
Tenga en cuenta también que si ejecuta esto directamente a través adb shell
de , 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'
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>
izzy
'com.android.settings/.Settings$PowerUsageSummaryActivity'
, o escapar ,$
quecom.android.settings/.Settings\$PowerUsageSummaryActivity
es lo que se suele hacer en el shell cuando se trata de$
signos literales que no indican una variable?Nicolás Al.