Запуск активности, указанной в разделе «Настройки», с терминала (или оболочки adb)

13

Я хотел бы начать эту деятельность с терминала: 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 часть, поэтому в основном я просто получаю стандартное меню «Настройки» открыто. Как я могу открыть эту конкретную страницу «Сводная информация об энергопотреблении» с терминала?

juniecho
источник
2
Вы пытались поместить его в одинарные кавычки, т. Е. 'com.android.settings/.Settings$PowerUsageSummaryActivity'- или избежать $подобного com.android.settings/.Settings\$PowerUsageSummaryActivity- что обычно делают в оболочке при работе с литеральными $знаками, не указывающими переменную?
Иззи
Как насчет того, чтобы открыть работу Tasker в RunLog поверх терминала? Tasker имеет 3-х точечное меню, чтобы открыть окно журнала.
Никола Ал.

Ответы:

12

Как я уже писал в своем комментарии, есть некоторые специальные символы, требующие особой осторожности при работе в командной строке (или в сценариях оболочки). Одним из них является $знак, который обычно указывает на переменную. Если это следует понимать буквально, вам нужно его избежать (или заключить всю строку в одинарные кавычки). Аналогичные правила для кавычек.

Как ваша команда должна выглядеть с спасся $ , вы уже можете найти в ответе eldarerathis' :

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

Обратите внимание на «обратную косую черту» перед $- это знак побега. Используйте то же самое для кавычек или пробелов, если ваша команда включает некоторые, которые следует понимать буквально, например

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

оба будут делать одно и то же: сделать строку одним параметром. В примере вашей am startкоманды это то, что произошло при разборе:

  • команда: am
  • параметр 1: start
  • параметр 2: -S
  • параметр 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • имеет $, интерпретируя: переменная $PowerUsageSummaryActivityне установлена, поэтому пустой
    • вывод: параметр 3 com.android.settings/.Settings

Также обратите внимание, что если вы запускаете это напрямую через adb shell, команда дважды выполняет синтаксический анализ оболочки, поэтому вам нужно снова или снова ввести команду в кавычки , например:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
Иззи
источник
ООО Спасибо! о, как я мог забыть сбежать $ ... мне должным образом стыдно :)
juniecho
Мелочи жизни ... Легко не заметить :) Кстати: если это решило вашу проблему, подумайте о том, чтобы пометить один из ответов как "принятый" (щелкнув галочку рядом с ним) [и опровергнуть другой :)] - так это понятно другим людям, пытающимся попасть в аналогичную ловушку :)
Иззи
о, я нашел галочку. так вот как я принимаю ответ ... спасибо, я впервые использую stackexchange;)
juniecho
Добро пожаловать в любое время :) Теперь вы видите, как хорошо это работает здесь: распространять информацию :)
Иззи
3
С bash, в моем случае, сработало только это adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Не знаю почему.
Повелитель огня
5

Escape $в имени подкласса, и оно должно работать:

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

Другой вариант - вместо этого отправить намерение, которое прослушивает экран Power Usage:

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

Вы можете найти намерения, посмотрев <action>теги в файле AndroidManifest.xml для «приложения» настроек (которое можно просмотреть на GitHub ). В качестве примера приведем определение активности для 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
источник