Android cihaz etkin olup olmadığını ağ üzerinden öğrenin


9

Android TV çalıştıran bir nVidia Shield TV cihazım var.

Bunu ev sineması kurulumuma entegre etmek için cihazın aktif mi yoksa uykuda mı olduğunu belirleyebilmem gerekiyor.

Diğer aygıtlarım için bunu belirlemek için sadece ping kullanıyorum. Ancak, Android cihazlar temelde her zaman açık olduğundan, bu durumda çalışmaz.

Tabii ki, cihaz etkinken bir TCP bağlantı noktası açan ve uyurken kapatacak basit bir uygulama yazmak elbette bir yoludur.

Benim sorum, daha basit bir yol, belki mevcut bir uygulama veya bunu yapmak için kendi uygulamamı geliştirmeden bunu yapmanın başka bir yolu varsa.


Android cihazınız her zaman Kablosuz ağa bağlı mı?
frogatto

"Cihaz aktif" veya "açık" durumdayken karıştırdığınız hissine kapılıyorum. Lütfen sorunuzu daha kesin hale getirin.
Marian Paździoch

@ HiI'mFrogatto Cihaz WiFi kullanmıyor, Ethernet üzerinden bağlı, bu yüzden her zaman ağa bağlı.
Mika Fischer

@ MarianPaździoch Android TV, bir telefonun veya tabletin ekranının kapalı olmasına benzer şekilde düşük güç modu olan "uyku modu" adlı bir moda sahiptir. Bu uyku modu ile cihazın TV'de bir şeyler görüntülediği etkin mod arasında ayrım yapmak istiyorum. Bu sorunu netleştirir mi?
Mika Fischer

3
@MikaFischer "... kendi uygulamamı yazmadan ..." Stack Overflow :)
kodlayanlar

Yanıtlar:


1

Görünüşe göre nVidia Shield Android TV, Android 5.1.1 ile geliyor ve Marshmallow güncellemesi sadece Aralık ayından beri mevcut. Android 5.1.1'in cihazınızda yüklü sürüm olduğunu varsayıyorum.

Sorgu sistemi hizmetleri

etkinleştirme cihazda kablosuz modda. Gerekirse, talimatlar için resmi kılavuzu veya Izzy'nin bu cevabını izleyin .

Android'in durumunu - uyku veya uyanık - çeşitli sistem hizmetlerinin dökümünden bulabilirsiniz.

  • Hizmet: güç

    adb shell dumpsys power
    

    Dizeleri arayın mWakefulnessve / veya Display Power: state. Her ikisi de size ihtiyacınız olan durumu verecektir.

    Misal:

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

    bana verir

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • Hizmet: pencere

    adb shell dumpsys window
    

    Dizeleri mAwake=trueve / veya mScreenOnEarly=trueve / veyamScreenOnFully=true

    Misal:

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

    bana verir

    mAwake=true
    mScreenOnEarly=true mScreenOnFully=true
    
  • Hizmet: ekran

    adb shell dumpsys display
    

    Dizeleri arayın mState=OFFve / veya mScreenState=OFF.

    Misal:

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

    bana verir

    mState=OFF
    mScreenState=OFF
    

Otomasyonu Kullan

Önceki yöntemde belirtilen sistem hizmetlerinden hiçbiri işe yaramadıysa, Tasker veya MacroDroid veya Automate gibi bir uygulama.

Artık Android'in durumunu, uyku modunda Uyku ve Uyku modunda Uyanma gibi bir dosyaya yazmak için otomasyonu kullanacağız.

Tasker ,

  • Profil: Etkinlik → Ekran → Ekran Kapalı
  • Görev: (Eylemler): Dosya → Dosya Yaz → içine yazılacak bir metin dosyası seçin, Uyku yazın ve Yeni Satır Ekle'nin işaretini kaldırın
  • Profil: Etkinlik → Ekran → Ekran Açık
  • Görev: (Eylemler): Dosya → Dosya Yaz → içine yazılacak bir metin dosyası seçin, Uyandır yazın ve Yeni Satır Ekle'nin işaretini kaldırın

MacroDroid

Android ne yazık ki gelmiyor echoya da printfyardımcı değil , Cihaz köklü ise, meşgul kutusunu yükleyebilir ve huzur içinde olabilirsiniz. Değilse, busybox ikili dosyasını indirin , yürütülebilir izinleri ayarlayın ve /data/local/tmpkullanmaya itin adb push. Köklü olmayan bir aygıt için başka bir yol, biri devlet, biri Uyku metni ve sonuncusu Uyanış metni ile olmak üzere üç dosyayı saklamaktır. Ekran her kapandığında / açıldığında, ikinci / üçüncü dosyayı ilk dosyaya kopyalayın.

MacriDroid ayrıca komutları çalıştırmak için Güvenli Ayarlar gibi bir eklenti gerektirir .

  • Tetik: Ekran Açık / Kapalı → Ekran Kapalı
  • İşlem: Güvenli Ayarlar → İşlemler → Komutu Çalıştır:

    • Komut: echo Sleeping > FILE_PATH
    • Komut Adı: Ekran kapalı
  • Tetik: Ekran Açık / Kapalı → Ekran Açık
  • İşlem: Güvenli Ayarlar → İşlemler → Komutu Çalıştır:

    • Komut: echo Awake > FILE_PATH
    • Komut Adı: Ekran kapalı

Köklü olmayan bir Android için, echoile değiştirilmelidir ./data/local/tmp/busybox echo. Aksi takdirde, komutu kullanarak bir kopyalama işlemi gerçekleştirin cp SOURCE DESTINATION.

Otomatikleştirmek

Akışınız az çok bu resme benzemeli

(Büyütmek için resme tıklayın)

IMG:

Biri uyku ve diğeri uyanık olmak üzere iki akış yaratma gereksiniminiz. Akıştaki ikinci bloğa Yayın alma adı verilir ve Uygulamalar altında bulunabilir. Üçüncü blok Dosya yazma metni olarak adlandırılır ve Dosya ve Depolama altında bulunabilir.

Artık bu dosyanın içeriğini kablosuz modda adb kullanarak veya SSH kullanarak kontrol edebilirsiniz ( Android'de bir SSH sunucusu gerektirir ; sunucuyu tüm arabirimlerde çalıştırın ve tek bir arabirime bağlamayın.)


Durumu öğrenmek için Android yerine bu sunucuyu sorgulayabilmeniz için otomasyon uygulamanızın dosyayı yerel veya uzak bir sunucuya yüklemesini sağlamak gibi başka bir olasılık daha vardır.



Bir şey bana bunun Android TV'de sorunsuz bir sürüş olmayacağını söylüyor. Cevabımın işe yaramadığını bildirin. Ben indireceğim. Etrafta gizlice yardımcı bir cevap tutmak niyetinde değilim.
Firelord

1
Vay, detaylı cevap için teşekkürler! Tasker'ı bu şekilde kullanmak bir cazibe gibi çalıştı! Tek uyarı, ayarlamak için bir fare bağlamanız gerektiğidir. Bir dosyaya yazmadım. Bunun yerine Python'a basit bir HTTP sunucusu yazdım ve kalkandan GET istekleri gönderdim.
Mika Fischer

Evet, seninki de güzel bir teknik. Sunucuya hayatta olduğunuzu söylemek gibi. Ve ödül için teşekkürler! Yöntem 1imin (bu sistem hizmeti yöntemi) başarısız olup olmadığını söyleyebilir misiniz, yoksa henüz denemediniz mi?
Firelord

1
Köklü olmadığım için denemedim ve görebildiğim kadarıyla, benim için çok rahatsız edici olan adb ağ modunu etkinleştirmek için cihaza bir bilgisayar bağlamak gerekiyor ...
Mika Fischer

0

Bu aslında bir çözüm değildir, ancak cihaz ayarlarında, cihaz bekleme moduna geçtiğinde muhtemelen Wi-Fi'yi devre dışı bırakan bir seçenek vardır. Böyle bir seçenek olmasa bile, bunun için bir uygulama olması gerektiğinden eminim. Wi-Fi IDLE durumunda devre dışı bırakılırsa, "ping" yaklaşımı işe yarayacaktır ancak cihaz IDLE durumuna geçtiğinde çalışmayan arka plan güncellemeleriyle uğraşmanız gerekir.

Bu çözüm için varsayılan bir uygulama olduğunu düşünmüyorum ama belki daha fazla nokta size yardımcı olacaktır. PowerManager'ı dinleyen kendi Android uygulamanızı oluşturabilirsiniz Intent. Ancak, cihazınız sunucu isteği aldığında büyük olasılıkla uyanık olacağına dikkat edin.


İyi fikir, ancak bu bir set üstü kutu ve Ethernet ile bağlı. Ve yazdığım gibi, bir uygulama yazabileceğimi biliyorum. Sorular, bunu yapmanın bir yolu varsa :)
Mika Fischer

AFAIK, Android'in geliştirici POV'sinden bağlantı türlerinde büyük bir fark yok. Bu nedenle, cihaz boşta durumuna girdiğinde kablolu dahil her türlü bağlantıyı devre dışı bırakabilen bir 3d parti uygulaması muhtemelen vardır.

0

Cihazın boş modda olup olmadığını bilmek için bir kabuk betiği ayarlayabilirsiniz
.. eğer cihaz boşsa .. o zaman cihaza sinyal gönderebilirsiniz .. Örneğin u aşağıdaki gibi adb shell komutunu kullanabilirsiniz: adb shell dumpsys deviceidle


İlginç, ben ağ üzerinden çalışma adb olsun veya bunun yerine bir SSH sunucusu kullanıp kullanamayacağımı görmek gerekir.
Mika Fischer

Ancak, dumpsys deviceidleen azından telefonumda gerçekten çalışmıyor (verir Can't find service: deviceidle).
Mika Fischer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.