Gostaria de iniciar esta atividade do terminal: com.android.settings.Settings$PowerUsageSummaryActivity
eu tentei
am start -S com.android.settings/.Settings$PowerUsageSummaryActivity
e é isso que eu recebo:
Stopping: com.android.settings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings }
O problema é que o am start
comando omite a $PowerUsageSummaryActivity
parte, então basicamente estou apenas abrindo o menu "Configurações" padrão. como posso abrir a página "resumo do uso de energia" específica do terminal?
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- ou escapar do$
mesmocom.android.settings/.Settings\$PowerUsageSummaryActivity
- que é a coisa usual a se fazer no shell ao lidar com$
sinais literais que não indicam uma variável?Respostas:
Como escrevi no meu comentário, existem alguns caracteres especiais que precisam de cuidados extras ao trabalhar no prompt do shell (ou nos scripts do shell). Um deles é o
$
sinal, que geralmente indica uma variável. Se isso for considerado literalmente, você precisará escapá-lo (ou coloque a cadeia inteira entre aspas simples). Regras semelhantes para aspas.Como seu comando deve parecer com um escape
$
, você já pode encontrar na resposta de eldarerathis :Observe a barra invertida na frente do
$
- esse é o sinal de fuga. Use o mesmo para aspas ou espaços em branco, se o seu comando incluir algumas que devem ser tomadas literalmente, por exemplo,ambos fariam o mesmo: transformando a string em um único parâmetro. No exemplo do seu
am start
comando, foi o que aconteceu na análise:am
start
-S
com.android.settings/.Settings$PowerUsageSummaryActivity
$
, interpretando: a variável$PowerUsageSummaryActivity
não está definida, portanto, vaziacom.android.settings/.Settings
Observe também que, se você executar isso diretamente via
adb shell
, o comando passará pela análise de shell duas vezes, portanto, você precisa escapar ou citar o comando novamente , assim:fonte
adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'
. Não sei porque.Escape do
$
nome da subclasse e deve funcionar:Outra opção é enviar a intenção que a tela Uso de energia escuta:
Você pode encontrar as intenções consultando as
<action>
tags no arquivo AndroidManifest.xml do "aplicativo" Configurações (que pode ser visualizado no GitHub ). Como exemplo, aqui está a definição de atividade paraSettings$PowerUsageSummaryActivity
:fonte