Bắt đầu một hoạt động được liệt kê trong Cài đặt của Cấm


13

Tôi muốn bắt đầu hoạt động này từ thiết bị đầu cuối: com.android.settings.Settings$PowerUsageSummaryActivity

Tôi đã thử

am start -S com.android.settings/.Settings$PowerUsageSummaryActivity

và đây là những gì tôi nhận được:

Stopping: com.android.settings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings }

Vấn đề là am startlệnh bỏ qua các $PowerUsageSummaryActivityphần, vì vậy về cơ bản tôi chỉ nhận được tiêu chuẩn "Cài đặt" menu mở. Làm cách nào tôi có thể mở trang "tóm tắt sử dụng năng lượng" cụ thể đó từ thiết bị đầu cuối?


2
Bạn đã thử đặt nó vào dấu ngoặc đơn, tức là 'com.android.settings/.Settings$PowerUsageSummaryActivity'- hoặc thoát khỏi cái $tương tự com.android.settings/.Settings\$PowerUsageSummaryActivity- đó là những thứ thông thường phải làm trên vỏ khi xử lý các $dấu hiệu bằng chữ không chỉ ra một biến?
Izzy

Làm thế nào về hoạt động RunLog của Nhiệm vụ mở trên đầu trang từ thiết bị đầu cuối? Tasker có menu 3 chấm để mở cửa sổ Log.
Nicola Al.

Câu trả lời:


12

Như tôi đã viết trong bình luận của mình, có một số ký tự đặc biệt cần được chăm sóc thêm khi làm việc tại dấu nhắc shell (hoặc trong các kịch bản shell). Một trong số đó là $dấu hiệu, thường chỉ ra một biến. Nếu điều đó nên được thực hiện theo nghĩa đen, bạn cần phải thoát nó (hoặc gửi toàn bộ chuỗi bằng dấu ngoặc đơn). Quy tắc tương tự cho dấu ngoặc kép.

Lệnh của bạn sẽ trông như thế nào với một lối thoát $ , bạn đã có thể tìm thấy trong câu trả lời của eldarerathis :

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

Lưu ý "dấu gạch chéo ngược" phía trước dấu $- đó là dấu hiệu thoát. Sử dụng tương tự cho dấu ngoặc kép hoặc khoảng trắng, nếu lệnh của bạn bao gồm một số được thực hiện theo nghĩa đen, ví dụ

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

cả hai sẽ làm như nhau: Tạo chuỗi thành một tham số. Trong ví dụ về am startlệnh của bạn , đây là những gì đã xảy ra khi phân tích cú pháp:

  • chỉ huy: am
  • tham số 1: start
  • tham số 2: -S
  • tham số 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • có một $, diễn giải: biến $PowerUsageSummaryActivitykhông được đặt, nên trống
    • kết luận: tham số 3 là com.android.settings/.Settings

Cũng lưu ý rằng nếu bạn chạy trực tiếp thông qua adb shell, lệnh đi qua vỏ phân tích hai lần, vì vậy bạn cần phải thoát khỏi hoặc trích dẫn lệnh một lần nữa , như thế này:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'

ồ cảm ơn! oh làm sao tôi có thể quên thoát $ ... tôi thật đáng xấu hổ :)
juniecho

Những điều nhỏ nhặt trong cuộc sống ... Dễ bỏ qua :) Btw: Nếu điều đó giải quyết được vấn đề của bạn, hãy xem xét việc đánh dấu một trong những câu trả lời là "được chấp nhận" (nhấp vào dấu chọn bên cạnh) [và upvote cái khác :)] - vì vậy mọi người đều hiểu rõ về một cái bẫy tương tự :)
Izzy

oh tôi tìm thấy dấu kiểm Vì vậy, đây là cách tôi chấp nhận câu trả lời ... cảm ơn đây là lần đầu tiên tôi sử dụng stackexchange;)
juniecho

Bạn được chào đón bất cứ lúc nào :) Bây giờ bạn thấy nó hoạt động tốt như thế nào ở đây: lan truyền từ :)
Izzy

3
Với bash, trong trường hợp của tôi, chỉ điều này hoạt động : adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Không biết tại sao.
Firelord

5

Thoát khỏi $tên lớp con và nó sẽ hoạt động:

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

Thay vào đó, thay vào đó là gửi ý định mà màn hình Power Use lắng nghe:

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

Bạn có thể tìm thấy ý định bằng cách xem các <action>thẻ trong tệp AndroidManifest.xml cho "ứng dụng" Cài đặt (có thể được xem trên GitHub ). Ví dụ, đây là định nghĩa hoạt động cho 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.