Iniciando uma atividade listada em "Configurações" no terminal (ou shell adb)

13

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 startcomando omite a $PowerUsageSummaryActivityparte, 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?

juniecho
fonte
2
Você já tentou colocá-lo entre aspas simples, ou seja, 'com.android.settings/.Settings$PowerUsageSummaryActivity'- ou escapar do $mesmo com.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?
Izzy
Que tal abrir a atividade do RunLog da Tasker no topo do terminal? O Tasker possui um menu de 3 pontos para abrir a janela Log.
Nicola Al.

Respostas:

12

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 :

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

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,

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

ambos fariam o mesmo: transformando a string em um único parâmetro. No exemplo do seu am startcomando, foi o que aconteceu na análise:

  • comando: am
  • parâmetro 1: start
  • parâmetro 2: -S
  • parâmetro 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • tem uma $, interpretando: a variável $PowerUsageSummaryActivitynão está definida, portanto, vazia
    • conclusão: o parâmetro 3 é com.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:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
Izzy
fonte
oh obrigado! Oh como eu poderia esquecer para escapar $ ... eu estou devidamente envergonhado :)
juniecho
As pequenas coisas da vida ... Fácil de ignorar :) Btw: se isso resolveu seu problema, marque uma das respostas como "aceita" (clique na marca de seleção ao lado) [e vote na outra :)] - então é claro para outras pessoas batendo em uma armadilha semelhante :)
Izzy
Oh, eu encontrei a marca de seleção. assim isto é como eu aceitar a resposta ... graças esta é a primeira vez que eu uso Stackexchange;)
juniecho
Seja bem-vindo a qualquer momento :) Agora, veja como ele funciona aqui: espalhe a notícia :)
Izzy
3
Com bash, no meu caso, só isso funcionou: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Não sei porque.
Firelord
5

Escape do $nome da subclasse e deve funcionar:

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

Outra opção é enviar a intenção que a tela Uso de energia escuta:

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

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 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
fonte