Memulai aktivitas yang terdaftar di bawah “Pengaturan” dari terminal (atau adb shell)

13

Saya ingin memulai kegiatan ini dari terminal: com.android.settings.Settings$PowerUsageSummaryActivity

Saya mencoba

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

dan inilah yang saya dapatkan:

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

Masalahnya adalah am startperintah menghilangkan yang $PowerUsageSummaryActivitysebagian, jadi pada dasarnya aku hanya mendapatkan standar menu "Settings" terbuka. bagaimana saya bisa membuka halaman "ringkasan penggunaan daya" khusus dari terminal?

juniecho
sumber
2
Sudahkah Anda mencoba memasukkannya ke dalam tanda kutip tunggal, yaitu 'com.android.settings/.Settings$PowerUsageSummaryActivity'- atau melarikan diri dari $sejenisnya com.android.settings/.Settings\$PowerUsageSummaryActivity- yang merupakan hal yang biasa dilakukan pada shell ketika berhadapan dengan $tanda - tanda literal yang tidak menunjukkan variabel?
Izzy
Bagaimana dengan membuka aktivitas RunLog Tasker di atas dari terminal? Tasker memiliki menu 3 titik untuk membuka jendela Log.
Nicola Al.

Jawaban:

12

Seperti yang saya tulis dalam komentar saya, ada beberapa karakter khusus yang membutuhkan perhatian ekstra ketika bekerja di shell prompt (atau dalam skrip shell). Salah satunya adalah $tanda, yang biasanya menunjukkan suatu variabel. Jika itu harus diambil secara harfiah, Anda harus menghindarinya (atau lampirkan seluruh string dengan tanda kutip tunggal). Aturan serupa untuk tanda kutip.

Bagaimana perintah Anda akan terlihat seperti dengan melarikan diri $ , Anda sudah dapat menemukan jawaban eldarerathis :

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

Catat "back-slash" di depan $- itulah tanda keluar. Gunakan hal yang sama untuk tanda kutip atau kosong, jika perintah Anda menyertakan beberapa yang harus diambil secara harfiah, misalnya

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

keduanya akan melakukan hal yang sama: Membuat string menjadi parameter tunggal. Dalam contoh am startperintah Anda , inilah yang terjadi pada parsing:

  • perintah: am
  • parameter 1: start
  • parameter 2: -S
  • parameter 3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • memiliki $, menafsirkan: variabel $PowerUsageSummaryActivitytidak disetel, jadi kosong
    • kesimpulan: parameter 3 adalah com.android.settings/.Settings

Perhatikan juga bahwa jika Anda menjalankan ini langsung melalui adb shell, perintah melewati parsing shell dua kali, jadi Anda perlu melarikan diri atau mengutip perintah lagi , seperti ini:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
Izzy
sumber
Oh terima kasih! oh bagaimana saya bisa lupa untuk melarikan diri $ ... saya sepatutnya dipermalukan :)
juniecho
Hal-hal kecil dalam hidup ... Mudah diabaikan :) Btw: Jika itu menyelesaikan masalah Anda, pertimbangkan untuk menandai salah satu jawaban sebagai "diterima" (mengklik tanda centang di sebelahnya) [dan pilih-pilih yang lain :)] - jadi jelas bagi orang lain memanfaatkan perangkap yang sama :)
Izzy
oh saya menemukan tanda centang. jadi ini adalah bagaimana saya menerima jawabannya ... terima kasih ini adalah pertama kalinya saya menggunakan stackexchange;)
juniecho
Terima kasih kembali kapan saja :) Sekarang Anda melihat seberapa baik kerjanya di sini: sebarkan berita :)
Izzy
3
Dengan bash, dalam kasus saya, hanya ini bekerja: adb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'. Tidak tahu kenapa
Firelord
5

Keluar dari $nama sub-kelas dan itu akan berfungsi:

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

Pilihan lain adalah sebagai gantinya mengirim maksud bahwa layar Penggunaan Daya mendengarkan:

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

Anda dapat menemukan maksud dengan melihat <action>tag di file AndroidManifest.xml untuk "aplikasi" Pengaturan (yang dapat dilihat di GitHub ). Sebagai contoh, berikut adalah definisi aktivitas untuk 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
sumber