Chciałbym rozpocząć tę aktywność od terminala: com.android.settings.Settings$PowerUsageSummaryActivity
próbowałem
am start -S com.android.settings/.Settings$PowerUsageSummaryActivity
i to właśnie otrzymuję:
Stopping: com.android.settings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings }
Problem polega na tym, że am start
polecenie pomija tę $PowerUsageSummaryActivity
część, więc po prostu otwieram standardowe menu „Ustawienia”. Jak mogę otworzyć tę konkretną stronę „Podsumowanie zużycia energii” z terminala?
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- lub uciec od$
podobnychcom.android.settings/.Settings\$PowerUsageSummaryActivity
- co zwykle robi się w powłoce, gdy mamy do czynienia z dosłownymi$
znakami nie wskazującymi zmiennej?Odpowiedzi:
Jak napisałem w moim komentarzu, niektóre znaki specjalne wymagają szczególnej uwagi podczas pracy z poleceniami powłoki (lub skryptami powłoki). Jednym z nich jest
$
znak, który zwykle wskazuje zmienną. Jeśli należy to potraktować dosłownie, musisz go uciec (lub zawrzeć cały ciąg pojedynczymi cudzysłowami). Podobne zasady dotyczące znaków cudzysłowu.Jak powinno wyglądać twoje polecenie z ucieczką
$
, możesz już znaleźć odpowiedź Eldarerathisa :Zwróć uwagę na „ukośnik wsteczny” przed
$
- to znak ucieczki. Użyj tego samego dla znaków cudzysłowu lub spacji, jeśli twoje polecenie zawiera niektóre, które należy wziąć dosłownie, npoba zrobiłyby to samo: uczynienie z łańcucha pojedynczego parametru. W przykładzie twojego
am start
polecenia, tak się stało podczas analizowania:am
start
-S
com.android.settings/.Settings$PowerUsageSummaryActivity
$
, interpretacja: zmienna$PowerUsageSummaryActivity
nie jest ustawiona, więc pustacom.android.settings/.Settings
Zauważ też, że jeśli uruchomisz to bezpośrednio za pomocą
adb shell
, polecenie przejdzie dwukrotnie analizę płaszcza, więc musisz uciec lub zacytować polecenie ponownie , tak jak poniżej:źródło
adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'
. Nie wiem dlaczego.Escape the
$
w nazwie podklasy i powinno działać:Inną opcją jest wysłanie zamiaru, który nasłuchuje na ekranie Zużycie energii:
Możesz znaleźć zamiary, patrząc na
<action>
znaczniki w pliku AndroidManifest.xml dla „aplikacji” Ustawienia (którą można wyświetlić na GitHub ). Jako przykład, oto definicja działania dlaSettings$PowerUsageSummaryActivity
:źródło