터미널 (또는 adb 쉘)에서 “설정”에 나열된 활동 시작 시도했다 am start -S com.android.settings/.Settings$PowerUsageSummaryActivity 그리고

터미널에서이 활동을 시작하고 싶습니다 : 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 했기 때문에 기본적으로 표준 “설정”메뉴가 열립니다. 터미널에서 특정 “전력 사용량 요약”페이지를 열려면 어떻게해야합니까?



답변

내 의견에 썼 듯이 셸 프롬프트 (또는 셸 스크립트)에서 작업 할 때 특별한주의가 필요합니다. 그중 하나는 $일반적으로 변수를 나타내는 부호입니다. 그것이 문자 그대로 취해 져야한다면, 그것을 피해야합니다 (또는 전체 문자열을 작은 따옴표로 묶어야합니다). 인용 부호에 대한 유사한 규칙.

탈출 된 상태 $ 에서 명령이 어떻게 보이는지 이미 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'


답변

$하위 클래스 이름에서 이스케이프하면 작동합니다.

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>


답변