Cari tahu melalui jaringan jika perangkat Android aktif

9

Saya memiliki perangkat nVidia Shield TV, yang menjalankan TV Android.

Untuk mengintegrasikan ini ke dalam pengaturan teater rumah saya, saya harus dapat menentukan apakah perangkat aktif atau tidur.

Untuk perangkat saya yang lain, saya hanya menggunakan ping untuk menentukan ini. Namun, karena perangkat Android pada dasarnya selalu aktif, ini tidak berfungsi dalam kasus ini.

Salah satu cara, tentu saja, adalah menulis aplikasi sederhana, yang membuka port TCP ketika perangkat aktif dan menutupnya ketika sedang tidur.

Pertanyaan saya adalah apakah ada cara yang lebih sederhana, mungkin aplikasi yang ada atau cara lain untuk melakukan ini tanpa mengembangkan aplikasi saya sendiri untuk melakukan ini.

Mika Fischer
sumber
Apakah perangkat Android Anda selalu terhubung ke Wi-Fi?
frogatto
Saya merasa bahwa Anda sedang mencampur "perangkat aktif atau tidur" dengan "sedang". Harap buat pertanyaan Anda lebih tepat.
Marian Paździoch
@ HiI'mFrogatto Perangkat ini tidak menggunakan WiFi, terhubung melalui Ethernet, jadi selalu terhubung ke jaringan.
Mika Fischer
@ MarianPaździoch Android TV memiliki mode yang disebut "mode tidur", yang merupakan mode berdaya rendah, mirip dengan ketika layar ponsel atau tablet mati. Saya ingin membedakan antara mode tidur ini, dan mode aktif, di mana perangkat menampilkan hal-hal di TV. Apakah itu mengklarifikasi masalah?
Mika Fischer
3
@MikaFischer "... tanpa menulis aplikasi saya sendiri, ..." Stack Overflow diperuntukkan bagi mereka yang :)
berkode

Jawaban:

1

Tampaknya TV Android nVidia Shield dilengkapi dengan Android 5.1.1 dan pembaruan Marshmallow tersedia sejak bulan Desember saja. Saya berasumsi bahwa Android 5.1.1 adalah versi yang diinstal pada perangkat Anda.

Layanan sistem kueri

Aktifkan dalam mode nirkabel di perangkat. Ikuti panduan resmi atau jawaban Izzy ini untuk instruksi, jika perlu.

Anda dapat menemukan status Android - tidur atau bangun - dari berbagai layanan sistem.

  • Layanan: Daya

    adb shell dumpsys power
    

    Cari string mWakefulnessdan / atau Display Power: state. Keduanya akan memberi Anda status yang Anda butuhkan.

    Contoh:

    adb shell 'dumpsys power | grep -e "mWakefulness=" -e "Display Power"'
    

    memberi saya

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • Layanan: Jendela

    adb shell dumpsys window
    

    Cari string mAwake=truedan / atau mScreenOnEarly=truedan / ataumScreenOnFully=true

    Contoh:

    adb shell 'dumpsys window | grep -e "mAwake=" -e "mScreenOnEarly" -e "mScreenOnFully"'
    

    memberi saya

    mAwake=true
    mScreenOnEarly=true mScreenOnFully=true
    
  • Layanan: Tampilan

    adb shell dumpsys display
    

    Cari string mState=OFFdan / atau mScreenState=OFF.

    Contoh:

    adb shell 'dumpsys display | grep -e "mState=" -e "mScreenState"'
    

    memberi saya

    mState=OFF
    mScreenState=OFF
    

Gunakan Otomasi

Jika tidak ada layanan sistem yang disebutkan dalam metode sebelumnya bekerja untuk Anda, setup aplikasi , seperti Tasker atau MacroDroid atau Automate.

Kami sekarang akan menggunakan otomatisasi untuk menulis status Android ke dalam file, seperti mode Tidur untuk tidur dan Sedar saat terjaga.

Tasker ,

  • Profil: Acara → Tampilan → Tampilan Mati
  • Tugas: (Tindakan): File → Tulis File → pilih file teks untuk dituliskan, ketik Tidur dan hapus centang Tambahkan Baris Baru
  • Profil: Acara → Tampilan → Tampilan Aktif
  • Tugas: (Tindakan): File → Tulis File → pilih file teks untuk dituliskan, ketik Sedar dan hapus centang Tambahkan Baris Baru

MacroDroid

Android sayangnya tidak datang dengan echoatau printfutilitas, Jika perangkat di-rooting maka Anda dapat menginstal busybox dan merasa damai. Jika tidak, men-download busybox biner , mengatur hak akses executable dan dorong ke dalam /data/local/tmpmenggunakan adb push. Cara lain untuk perangkat yang tidak di-rooting adalah menyimpan tiga file, satu untuk status, satu dengan teks Tidur dan yang terakhir dengan teks Sedarlah. Setiap kali layar mati / hidup, salin file kedua / ketiga menjadi yang pertama.

MacriDroid juga membutuhkan plugin, seperti Pengaturan Aman untuk menjalankan perintah.

  • Pemicu: Layar Nyala / Mati → Layar Mati
  • Tindakan: Pengaturan Aman → Tindakan → Jalankan Perintah:

    • Perintah: echo Sleeping > FILE_PATH
    • Nama Perintah: Layar mati
  • Pemicu: Layar Nyala / Mati → Layar Nyala
  • Tindakan: Pengaturan Aman → Tindakan → Jalankan Perintah:

    • Perintah: echo Awake > FILE_PATH
    • Nama Perintah: Layar mati

Untuk Android yang tidak di-root, echoharus diganti dengan ./data/local/tmp/busybox echo. Jika tidak, lakukan operasi penyalinan menggunakan perintah cp SOURCE DESTINATION.

Mengotomatisasikan

Aliran Anda harus lebih atau kurang terlihat seperti gambar ini

(Klik gambar untuk memperbesar)

IMG:

Kebutuhan Anda untuk menciptakan dua aliran, satu untuk tidur dan lainnya untuk bangun. Blok kedua dalam aliran bernama Siaran terima dan dapat ditemukan di bawah Aplikasi. Blok ketiga bernama File write text dan dapat ditemukan di bawah File & Storage.

Anda sekarang dapat memeriksa konten file tersebut menggunakan adb dalam mode nirkabel atau menggunakan SSH (memerlukan server SSH di Android; jalankan server di semua antarmuka dan jangan ikat ke satu antarmuka.)


Ada kemungkinan lain, seperti membuat aplikasi otomasi Anda mengunggah file ke server lokal atau jauh sehingga Anda dapat meminta server itu alih-alih Android untuk mengetahui status.


Firelord
sumber
Sesuatu memberi tahu saya ini bukan perjalanan yang mulus di TV Android. Beri tahu saya jika jawaban saya gagal. Saya akan mencatatnya. Saya tidak berniat menyimpan jawaban yang tidak membantu mengintai.
Firelord
1
Wow, terima kasih atas tanggapan terperinci! Menggunakan Tasker seperti ini bekerja sangat luar biasa! Satu-satunya peringatan adalah bahwa Anda perlu menghubungkan mouse untuk mengaturnya. Saya tidak menulis ke file. Alih-alih, saya menulis server HTTP sederhana dengan Python dan mengirim permintaan GET dari perisai.
Mika Fischer
Ya, teknik Anda juga bagus. Ini seperti memberi tahu server bahwa Anda masih hidup. Dan terima kasih atas hadiahnya! Maukah Anda memberi tahu saya apakah metode 1 (metode layanan sistem) itu gagal atau belum mencobanya?
Firelord
1
Saya tidak mencobanya karena saya tidak di-root dan sejauh yang saya lihat, perlu menghubungkan komputer ke perangkat mengaktifkan mode jaringan adb (setelah reboot misalnya), yang terlalu merepotkan bagi saya ...
Mika Fischer
0

Ini sebenarnya bukan solusi tetapi dalam pengaturan perangkat mungkin ada opsi yang menonaktifkan Wi-Fi saat perangkat beralih ke mode siaga. Bahkan jika tidak ada opsi seperti itu, saya yakin pasti ada aplikasi untuk ini. Jadi jika Wi-Fi dinonaktifkan dalam status IDLE maka pendekatan "ping" akan berfungsi tetapi Anda harus berurusan dengan pembaruan latar belakang yang tidak berfungsi dan seterusnya saat perangkat masuk ke status IDLE.

Saya tidak berpikir bahwa ada aplikasi default untuk solusi ini, tetapi mungkin poin lebih lanjut akan membantu Anda. Anda dapat membuat aplikasi Android Anda sendiri yang mendengarkan PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED Intent dan setelah menerima beberapa jenis permintaan dari server Anda, ia dapat mengirim kembali jika perangkat dalam keadaan sadar atau tidak. Namun perhatikan bahwa ketika perangkat Anda menerima permintaan server, perangkat itu mungkin akan bangun.


sumber
Ide bagus, namun ini adalah set-top-box dan terhubung melalui Ethernet. Dan ketika saya menulis, saya tahu saya bisa menulis aplikasi. Pertanyaannya adalah apakah ada cara untuk melakukan itu :)
Mika Fischer
AFAIK tidak ada perbedaan besar dalam jenis koneksi di Android dari dev's POV. Jadi mungkin ada aplikasi pihak 3d yang dapat menonaktifkan semua jenis koneksi termasuk kabel saat perangkat memasuki kondisi siaga.
0

Anda dapat mengatur skrip shell untuk mengetahui apakah perangkat dalam mode siaga .. jika perangkat idle .. maka Anda dapat
mengirim sinyal ke perangkat .. Misalnya Anda dapat menggunakan perintah shell adb seperti di bawah ini: adb shell dumpsys deviceidle


sumber
Menarik, saya harus melihat apakah saya bisa mendapatkan adb bekerja melalui jaringan atau apakah server SSH dapat digunakan sebagai gantinya.
Mika Fischer
Namun, dumpsys deviceidletidak benar-benar berfungsi pada ponsel saya setidaknya (memberi Can't find service: deviceidle).
Mika Fischer