ค้นหาผ่านเครือข่ายหากอุปกรณ์ Android เปิดใช้งานอยู่


9

ฉันมีอุปกรณ์ nVidia Shield TV ซึ่งใช้ Android TV

ในการรวมสิ่งนี้เข้ากับการตั้งค่าโฮมเธียเตอร์ของฉันฉันต้องสามารถตรวจสอบได้ว่าอุปกรณ์นั้นใช้งานอยู่หรือกำลังหลับอยู่

สำหรับอุปกรณ์อื่น ๆ ของฉันฉันใช้ ping เพื่อตรวจสอบสิ่งนี้ อย่างไรก็ตามเนื่องจากอุปกรณ์ Android นั้นเปิดใช้งานอยู่ตลอดเวลาจึงไม่สามารถใช้งานได้ในกรณีนี้

แน่นอนวิธีหนึ่งคือการเขียนแอปง่าย ๆ ซึ่งเปิดพอร์ต TCP เมื่ออุปกรณ์ทำงานและปิดเมื่อมันหลับ

คำถามของฉันคือถ้ามีวิธีที่ง่ายกว่าอาจเป็นแอปที่มีอยู่หรือวิธีอื่นในการทำเช่นนี้โดยไม่ต้องพัฒนาแอพของฉันเองเพื่อทำสิ่งนี้


อุปกรณ์ Android ของคุณเชื่อมต่อกับ Wi-Fi อยู่เสมอหรือไม่?
frogatto

ฉันรู้สึกว่าคุณกำลังผสม "อุปกรณ์ทำงานอยู่หรือกำลังนอนหลับ" เมื่อ "กำลังทำงาน" โปรดทำให้คำถามของคุณแม่นยำยิ่งขึ้น
Marian Paździoch

@ HiI'mFrogatto อุปกรณ์ไม่ได้ใช้ WiFi เชื่อมต่อผ่าน Ethernet จึงเชื่อมต่อกับเครือข่ายเสมอ
Mika Fischer

@ MarianPaździoch Android TV มีโหมดที่เรียกว่า "โหมดสลีป" ซึ่งเป็นโหมดพลังงานต่ำคล้ายกับเมื่อปิดหน้าจอโทรศัพท์หรือแท็บเล็ต ฉันต้องการแยกความแตกต่างระหว่างโหมดสลีปนี้และโหมดแอคทีฟที่อุปกรณ์แสดงสิ่งต่าง ๆ บนทีวี นั่นจะทำให้ปัญหาชัดเจนขึ้นหรือไม่?
Mika Fischer

3
@MikaFischer "... โดยไม่ต้องเขียนแอพของฉันเอง ... " Stack Overflow สำหรับคนที่ใช้รหัส:)
frogatto

คำตอบ:


1

ปรากฏว่า nVidia Shield Android TV มาพร้อมกับ Android 5.1.1 และการอัปเดต Marshmallow มีให้ตั้งแต่เดือนธันวาคมเท่านั้น ฉันสมมติว่า Android 5.1.1 เป็นรุ่นที่ติดตั้งในอุปกรณ์ของคุณ

บริการระบบสืบค้นข้อมูล

ทำให้สามารถ ในโหมดไร้สายบนอุปกรณ์ ทำตามคำแนะนำอย่างเป็นทางการหรือคำตอบของอิซซี่เพื่อรับคำแนะนำหากจำเป็น

คุณสามารถค้นหาสถานะของ Android - สลีปหรือตื่น - จากการดัมพ์ของบริการระบบต่างๆ

  • บริการ: กำลังไฟ

    adb shell dumpsys power
    

    ค้นหาสตริงและmWakefulness / หรือ Display Power: stateทั้งคู่จะให้สถานะที่คุณต้องการ

    ตัวอย่าง:

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

    ให้ฉัน

    mWakefulness=Asleep
    Display Power: state=OFF
    
  • บริการ: หน้าต่าง

    adb shell dumpsys window
    

    ค้นหาสตริงmAwake=trueและ / หรือmScreenOnEarly=trueและ / หรือmScreenOnFully=true

    ตัวอย่าง:

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

    ให้ฉัน

    mAwake=true
    mScreenOnEarly=true mScreenOnFully=true
    
  • บริการ: แสดงผล

    adb shell dumpsys display
    

    ค้นหาสตริงและmState=OFF / หรือmScreenState=OFF

    ตัวอย่าง:

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

    ให้ฉัน

    mState=OFF
    mScreenState=OFF
    

ใช้ระบบอัตโนมัติ

หากบริการระบบที่กล่าวถึงในวิธีการก่อนหน้านี้ไม่ทำงานสำหรับคุณให้ตั้งค่า แอปเช่น Tasker หรือ MacroDroid หรืออัตโนมัติ

ตอนนี้เราจะใช้ระบบอัตโนมัติเพื่อเขียนสถานะของ Android ลงในไฟล์เช่นโหมด Sleep for sleep และ Awake เมื่อมันตื่น

tasker ,

  • โปรไฟล์: เหตุการณ์→แสดง→แสดงปิด
  • ภารกิจ: (การดำเนินการ): ไฟล์→เขียนไฟล์→เลือกไฟล์ข้อความที่จะเขียนลงไป, พิมพ์โหมดสลีปและยกเลิกการเลือกเพิ่มบรรทัดใหม่
  • โปรไฟล์: เหตุการณ์→แสดง→แสดงเปิด
  • ภารกิจ: (การดำเนินการ): ไฟล์→เขียนไฟล์→เลือกไฟล์ข้อความที่จะเขียนให้พิมพ์ตื่นแล้วยกเลิกการเลือกเพิ่มบรรทัดใหม่

MacroDroid

Android เศร้าไม่ได้มาด้วยechoหรือprintfยูทิลิตี้หากอุปกรณ์ที่มีรากมาจากนั้นคุณสามารถติดตั้งbusyboxและจะอยู่อย่างสงบ ถ้าไม่ใช่ให้ดาวน์โหลด busybox binaryตั้งค่าการอนุญาตและเรียก/data/local/tmpใช้งานadb pushมัน อีกวิธีสำหรับอุปกรณ์ที่ไม่ได้รูทคือการเก็บไฟล์สามไฟล์หนึ่งไฟล์สำหรับสถานะหนึ่งไฟล์ที่มีข้อความ Sleeping และและไฟล์สุดท้ายที่มีข้อความ Awake เมื่อใดก็ตามที่หน้าจอปิด / เปิดให้คัดลอกไฟล์ที่สอง / สามลงในไฟล์แรก

MacriDroid ยังต้องการปลั๊กอินเช่นการตั้งค่าความปลอดภัยเพื่อดำเนินการคำสั่ง

  • ทริกเกอร์: เปิด / ปิดหน้าจอ→ปิดหน้าจอ
  • การดำเนินการ: การตั้งค่าที่ปลอดภัย→การกระทำ→เรียกใช้คำสั่ง:

    • คำสั่ง: echo Sleeping > FILE_PATH
    • ชื่อคำสั่ง: ปิดหน้าจอ
  • ทริกเกอร์: เปิด / ปิดหน้าจอ→เปิดหน้าจอ
  • การดำเนินการ: การตั้งค่าที่ปลอดภัย→การกระทำ→เรียกใช้คำสั่ง:

    • คำสั่ง: echo Awake > FILE_PATH
    • ชื่อคำสั่ง: ปิดหน้าจอ

สำหรับที่ไม่ใช่ราก Android ของจะถูกแทนที่ด้วยecho มิฉะนั้นจะทำดำเนินการคัดลอกโดยใช้คำสั่ง./data/local/tmp/busybox echocp SOURCE DESTINATION

ได้โดยอัตโนมัติ

โฟลว์ของคุณควรมีลักษณะมากกว่านี้หรือน้อยกว่า

(คลิกที่ภาพเพื่อขยาย)

IMG:

คุณต้องสร้างกระแสสองรายการหนึ่งรายการเพื่อการนอนหลับและอื่น ๆ เพื่อตื่นขึ้น บล็อกที่สองในโฟลว์มีชื่อว่าBroadcast receiveและสามารถพบได้ในแอพ บล็อกที่สามมีชื่อว่าFile write textและสามารถพบได้ใน File & Storage

ตอนนี้คุณสามารถตรวจสอบเนื้อหาของไฟล์นั้นโดยใช้ adb ในโหมดไร้สายหรือใช้ SSH (ต้องใช้เซิร์ฟเวอร์ SSHบน Android รันเซิร์ฟเวอร์บนทุกอินเตอร์เฟสและไม่ผูกเข้ากับอินเตอร์เฟสเดียว)


มีความเป็นไปได้อื่นเช่นการทำให้แอปอัตโนมัติของคุณอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ภายในหรือระยะไกลเพื่อให้คุณสามารถค้นหาเซิร์ฟเวอร์นั้นแทนที่จะเป็น Android เพื่อทราบสถานะ



มีบางอย่างบอกฉันว่านี่จะไม่เป็นการราบรื่นบน Android TV แจ้งให้เราทราบหากคำตอบของฉันไม่สามารถทำงานได้เลย ฉันจะเอามันลง ฉันไม่ได้ตั้งใจจะเก็บคำตอบที่ไม่ช่วยเหลือเอาไว้
Firelord

1
ว้าวขอบคุณสำหรับการตอบรับอย่างละเอียด! การใช้ทาซเคอร์แบบนี้ได้ผลเหมือนเป็นเครื่องราง ข้อแม้เดียวคือคุณต้องเชื่อมต่อเมาส์เพื่อตั้งค่า ฉันไม่ได้เขียนไฟล์ ฉันเขียนเซิร์ฟเวอร์ HTTP ธรรมดาใน Python และส่งคำร้องขอ GET ไปที่โล่
มิกะฟิสเชอร์

ใช่คุณเป็นเทคนิคที่ดีเช่นกัน มันเหมือนกับบอกเซิร์ฟเวอร์ว่าคุณยังมีชีวิตอยู่ และขอบคุณสำหรับความโปรดปราน! คุณจะช่วยบอกฉันได้ไหมว่าวิธีที่ 1 (วิธีการบริการของระบบนั้น) ของฉันล้มเหลวหรือคุณยังไม่ได้ลองเลย
Firelord

1
ฉันไม่ได้ลองเพราะฉันไม่ได้รูทและเท่าที่ฉันเห็นมันจำเป็นต้องเชื่อมต่อคอมพิวเตอร์กับอุปกรณ์ที่เปิดใช้งานโหมดเครือข่าย adb (หลังจากรีบูตเครื่องเป็นต้น) ซึ่งไม่สะดวกสำหรับฉัน ...
มิกะฟิสเชอร์

0

นี่ไม่ใช่วิธีแก้ปัญหา แต่ในการตั้งค่าอุปกรณ์อาจมีตัวเลือกที่ปิดใช้งาน Wi-Fi เมื่ออุปกรณ์เข้าสู่โหมดไม่ได้ใช้งาน แม้ว่าจะไม่มีตัวเลือกเช่นนี้ฉันมั่นใจว่าต้องมีแอปพลิเคชันสำหรับสิ่งนี้ ดังนั้นหาก Wi-Fi ถูกปิดใช้งานในสถานะ IDLE วิธีการ "ping" จะใช้งานได้ แต่คุณต้องจัดการกับการปรับปรุงพื้นหลังที่ไม่ทำงานและอื่น ๆ เมื่ออุปกรณ์เข้าสู่สถานะ IDLE

ฉันไม่คิดว่าจะมีแอปพลิเคชั่นเริ่มต้นสำหรับการแก้ปัญหานี้ แต่อาจมีจุดต่อไปที่จะช่วยคุณได้ คุณสามารถสร้างแอปพลิเคชั่น Android ของคุณเองซึ่งรับฟังPowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED Intentและเมื่อได้รับการร้องขอบางอย่างจากเซิร์ฟเวอร์ของคุณมันสามารถส่งกลับหากอุปกรณ์นั้นตื่นหรือไม่ อย่างไรก็ตามโปรดสังเกตว่าเมื่ออุปกรณ์ของคุณได้รับการร้องขอจากเซิร์ฟเวอร์อุปกรณ์นั้นอาจจะกลับมาทำงานอีกครั้ง


ความคิดที่ดีอย่างไรก็ตามนี่คือกล่องรับสัญญาณและเชื่อมต่อผ่านอีเธอร์เน็ต และอย่างที่ฉันเขียนฉันรู้ว่าฉันสามารถเขียนแอพได้ คำถามก็คือว่ามีวิธีการทำรอบ :) ว่า
มิกะฟิสเชอร์

AFAIK ไม่มีการเชื่อมต่อประเภทต่าง ๆ บน Android จาก POV ของ dev อาจมีแอพปาร์ตี้ 3d ซึ่งสามารถปิดการเชื่อมต่อทุกประเภทรวมถึงสายเมื่ออุปกรณ์เข้าสู่สถานะไม่ได้ใช้งาน

0

คุณสามารถตั้งค่าสคริปต์เชลล์เพื่อให้ทราบว่าอุปกรณ์อยู่ในโหมดไม่ได้ใช้งานหรือไม่หากอุปกรณ์ไม่ได้ใช้งาน .. จากนั้นคุณสามารถ
ส่งสัญญาณไปยังอุปกรณ์ .. ตัวอย่างเช่นคุณสามารถใช้คำสั่ง adb เชลล์ได้ด้านล่าง: adb shell dumpsys deviceidle


น่าสนใจฉันจะต้องดูว่าฉันได้รับ adb ทำงานผ่านเครือข่ายหรือว่าเซิร์ฟเวอร์ SSH สามารถใช้แทนได้
Mika Fischer

อย่างไรก็ตามdumpsys deviceidleโทรศัพท์ของฉันไม่ทำงานอย่างน้อย (ให้Can't find service: deviceidle)
Mika Fischer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.