Початок діяльності, зазначеної в розділі "Налаштування", з терміналу (або adb shell)


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 частина, тому в основному я просто отримую стандартне меню «Налаштування» відкрито. як я можу відкрити цю конкретну сторінку "Підсумок споживання енергії" з терміналу?


2
Чи намагалися ви вводити його в окремі лапки, тобто 'com.android.settings/.Settings$PowerUsageSummaryActivity'- або уникати $подібних com.android.settings/.Settings\$PowerUsageSummaryActivity- що це звичайні речі, які потрібно робити на оболонці, коли маєте справу з буквальними $знаками, що не вказують на змінну?
Іззі

Як щодо відкритої роботи RunLog Tasker на вершині від терміналу? 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'

О, дякую! ой, як я міг забути втекти від $ ... я гідно
соромлясь

Маленькі речі в житті ... Легко не помітити :) Btw: Якщо це вирішило вашу проблему, розгляньте позначення однієї з відповідей як "прийнято" (натиснувши прапорець поруч із нею) [та підтвердіть інший :)] - так іншим людям зрозуміло, що потрапляє у подібну пастку :)
Іззі

ой, я знайшов галочку. тож ось як я приймаю відповідь ... дякую, це я вперше використовую stackexchange;)
juniecho

Запрошуємо будь-коли :) Тепер ви бачите, як добре це працює тут: розповсюдьте слово :)
Іззі

3
З Баш, в моєму випадку, тільки це спрацювало: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Не знаю чому.
Firelord

5

Увійдіть до $назви підкласу, і він повинен працювати:

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

Інший варіант - замість того, щоб надіслати намір, який слухає екран енергоспоживання:

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.