터미널 (또는 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 했기 때문에 기본적으로 표준 "설정"메뉴가 열립니다. 터미널에서 특정 "전력 사용량 요약"페이지를 열려면 어떻게해야합니까?


2
이 경우, 즉, 작은 따옴표로 퍼팅 시도 'com.android.settings/.Settings$PowerUsageSummaryActivity'- 또는 탈출 $처럼 com.android.settings/.Settings\$PowerUsageSummaryActivity- 문자를 처리 할 때 쉘에 할 수있는 보통의 물건 이는 $표시 하지 변수를 나타내는가?
Izzy

터미널에서 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'

오 감사! 오 내가 어떻게 $ $을 탈출 잊어 버릴 수 ... 나는
부끄러운

인생의 작은 것들 ... 간과하기 쉬운 :) Btw : 문제가 해결되면 답변 중 하나를 "허용됨"으로 표시하십시오 (옆의 확인 표시를 클릭하십시오). 다른 사람들이 비슷한 함정을 사용하는 것이 분명합니다 :)
Izzy

오 확인 표시를 찾았습니다. 그래서 이것은 내가 대답을 받아들이는 방법입니다 ... 감사합니다 이것은 stackexchange를 처음 사용합니다;)
juniecho

당신은 언제든지 환영합니다 :) 이제 당신은 그것이 얼마나 잘 작동하는지 알 수 있습니다 : 단어를 전파하십시오 :)
Izzy

3
내 경우에는 bash를 사용하면 다음과 같이 작동 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>설정 "application"( GitHub에서 볼 수 있음)에 대한 AndroidManifest.xml 파일 의 태그를 보고 의도를 찾을 수 있습니다 . 예를 들어, 다음에 대한 활동 정의는 다음과 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.