Я хотел бы начать эту деятельность с терминала: com.android.settings.Settings$PowerUsageSummaryActivity
Я старался
am start -S com.android.settings/.Settings$PowerUsageSummaryActivity
и вот что я получаю:
Stopping: com.android.settings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings }
Проблема в том , am start
команда опускает$PowerUsageSummaryActivity
часть, поэтому в основном я просто получаю стандартное меню «Настройки» открыто. Как я могу открыть эту конкретную страницу «Сводная информация об энергопотреблении» с терминала?
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- или избежать$
подобногоcom.android.settings/.Settings\$PowerUsageSummaryActivity
- что обычно делают в оболочке при работе с литеральными$
знаками, не указывающими переменную?Ответы:
Как я уже писал в своем комментарии, есть некоторые специальные символы, требующие особой осторожности при работе в командной строке (или в сценариях оболочки). Одним из них является
$
знак, который обычно указывает на переменную. Если это следует понимать буквально, вам нужно его избежать (или заключить всю строку в одинарные кавычки). Аналогичные правила для кавычек.Как ваша команда должна выглядеть с спасся
$
, вы уже можете найти в ответе eldarerathis' :Обратите внимание на «обратную косую черту» перед
$
- это знак побега. Используйте то же самое для кавычек или пробелов, если ваша команда включает некоторые, которые следует понимать буквально, напримероба будут делать одно и то же: сделать строку одним параметром. В примере вашей
am start
команды это то, что произошло при разборе:am
start
-S
com.android.settings/.Settings$PowerUsageSummaryActivity
$
, интерпретируя: переменная$PowerUsageSummaryActivity
не установлена, поэтому пустойcom.android.settings/.Settings
Также обратите внимание, что если вы запускаете это напрямую через
adb shell
, команда дважды выполняет синтаксический анализ оболочки, поэтому вам нужно снова или снова ввести команду в кавычки , например:источник
adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'
. Не знаю почему.Escape
$
в имени подкласса, и оно должно работать:Другой вариант - вместо этого отправить намерение, которое прослушивает экран Power Usage:
Вы можете найти намерения, посмотрев
<action>
теги в файле AndroidManifest.xml для «приложения» настроек (которое можно просмотреть на GitHub ). В качестве примера приведем определение активности дляSettings$PowerUsageSummaryActivity
:источник