ซ่อนการแจ้งเตือนแบบถาวรสำหรับแอปพื้นหลังและโอเวอร์เลย์ใน Android O

บทช่วยสอนเกี่ยวกับการซ่อนการแจ้งเตือนแบบถาวรใน Android O ที่แสดงเมื่อแอปพื้นหลังทำงานหรือเมื่อมีการแสดงโอเวอร์เลย์

อัปเดต 8/25/17: บทช่วยสอนนี้ล้าสมัยแล้ว เนื่องจาก Google ได้แก้ไขวิธีที่เราใช้เพื่อซ่อนการแจ้งเตือนแบบถาวรในเบื้องหลัง อย่างไรก็ตาม เราได้ค้นพบวิธีแก้ปัญหาอื่นสำหรับปัญหานี้ และได้เขียนบทแนะนำสั้นๆ เกี่ยวกับเรื่องนี้ คุณสามารถหาได้ที่นี่.

Android O กำลังมองหาการนำการปรับปรุงที่สำคัญมาสู่ระบบปฏิบัติการ Android ที่เราทุกคนรู้จักและชื่นชอบ โหมดภาพซ้อนภาพสำหรับโทรศัพท์ ช่องการแจ้งเตือน การเลือกข้อความอัจฉริยะ บริการป้อนอัตโนมัติ และภายใต้ประทุนการเปลี่ยนแปลงมากมายเพื่อยืดอายุการใช้งานแบตเตอรี่ ประสิทธิภาพ และความปลอดภัยของคุณ คุณลักษณะหนึ่งที่ควรช่วยให้ผู้ใช้จัดการปัญหาเกี่ยวกับอายุการใช้งานแบตเตอรี่และประสิทธิภาพคือข้อจำกัดของกระบวนการในเบื้องหลัง โดยไม่ต้องลงรายละเอียดมากเกินไป แอปใน Android O จะไม่สามารถปลุกจากการลงทะเบียนรายการไว้ได้อีกต่อไป เครื่องรับการออกอากาศโดยนัยและพวกเขาไม่สามารถเริ่มบริการพื้นหลังได้อีกต่อไปโดยไม่ผ่าน JobScheduler. หากแอปต้องการเริ่มบริการในเบื้องหลัง แอปจะต้องแจ้งให้ผู้ใช้ทราบอย่างชัดเจนว่ากำลังดำเนินการดังกล่าวโดยการโพสต์การแจ้งเตือน อย่างไรก็ตาม เมื่อแอปทำงานในพื้นหลัง ดูเหมือนว่า Android O จะใช้งานได้แล้ว 

อื่น การแจ้งเตือนอย่างต่อเนื่องจะบอกคุณว่าแอปใดกำลังทำงานอยู่ สิ่งนี้ยังเกิดขึ้นเมื่อมีแอพที่มี SYSTEM_ALERT_WINDOW การอนุญาต (เช่น popular ทไวไลท์ app) กำลังแสดงภาพซ้อนทับอยู่

การแจ้งเตือนแบบถาวรของ Android O สำหรับแอปพื้นหลังและแอปซ้อนทับ เครดิต: เบน สคูน \\ 9to5Google

แม้ว่าการแจ้งเตือนเหล่านี้จะถูกย่อให้เล็กสุดตามค่าเริ่มต้น แต่ผู้ใช้ไม่สามารถยกเลิกหรือบล็อกอย่างถาวรในการตั้งค่าได้ พฤติกรรมนี้สร้างความรำคาญให้กับผู้ใช้จำนวนมาก และฉันหวังเป็นอย่างยิ่งว่า Google จะให้วิธีปิดการใช้งานการแจ้งเตือนนี้ใน Android O/Android 8.0 รุ่นสุดท้าย อย่างไรก็ตามหากพวกเขาไม่ทำเช่นนั้น เป็น ยังคงเป็นหนทางที่จะ ซ่อนการแจ้งเตือนแอปพื้นหลังถาวรอย่างถาวร. ฉันจะแสดงวิธีการดังกล่าวในคำแนะนำทีละขั้นตอน ตามด้วยคำอธิบายวิธีการทำงานและคำเตือนที่สำคัญ


ความต้องการ:

  • แอนดรอยด์โอ
  1. ติดตั้งไดรเวอร์ USB สำหรับโทรศัพท์ของคุณโดยเฉพาะหากคุณใช้ Windows (สามารถพบได้ ที่นี่).
  2. ดาวน์โหลด ไบนารี ADB สำหรับระบบปฏิบัติการเฉพาะของคุณ (หน้าต่าง, แม็ค, ลินุกซ์). ลิงค์เหล่านี้จะชี้ไปที่เวอร์ชั่นล่าสุดของไบนารี่เสมอ ดังนั้นคุณจึงไม่ต้องค้นหาเวอร์ชั่นล่าสุดในเน็ต
  3. แยกเนื้อหาของไฟล์ ZIP ที่คุณดาวน์โหลดมาไว้ในโฟลเดอร์ที่เข้าถึงได้ง่ายบนพีซีของคุณ (เช่น ในโฟลเดอร์ดาวน์โหลด)
  4. ไปที่แอปการตั้งค่าบนโทรศัพท์ของคุณแล้วแตะตัวเลือก "เกี่ยวกับโทรศัพท์"
  5. ค้นหาหมายเลขบิลด์แล้วแตะ 7 ครั้งเพื่อเปิดใช้งานโหมดนักพัฒนาซอฟต์แวร์ คุณจะเห็นป๊อปอัปเมื่อเปิดใช้งานแล้ว
  6. กลับไปที่เมนูหลักการตั้งค่าแล้วป้อนตัวเลือกนักพัฒนาเพื่อให้คุณสามารถเปิดใช้งานโหมดแก้ไขข้อบกพร่อง USB ได้
  7. เสียบโทรศัพท์ของคุณเข้ากับพีซีแล้วปัดแผงการแจ้งเตือนลงเพื่อเปลี่ยนโหมด USB จากโหมด "ชาร์จเท่านั้น" เป็นโหมด "ถ่ายโอนไฟล์ (MTP)" สิ่งนี้อาจไม่จำเป็นสำหรับโทรศัพท์ของคุณ
  8. บนพีซีของคุณ ให้เรียกดูไดเร็กทอรีที่คุณแตกไบนารี ADB
  9. เปิด Command Prompt/Terminal ในไดเร็กทอรี ADB นี้ สำหรับผู้ใช้ Windows สามารถทำได้โดยกด Shift+คลิกขวา จากนั้นเลือกตัวเลือก “open command prompt here”
  10. เมื่อคุณอยู่ใน Command Prompt หรือ Terminal ให้ป้อนคำสั่งต่อไปนี้: adb devices
  11. สิ่งนี้จะเริ่มต้น ADB daemon หากนี่เป็นครั้งแรกที่คุณใช้งาน ADB คุณจะเห็นข้อความแจ้งบนโทรศัพท์ที่ขอให้คุณอนุญาตการเชื่อมต่อ
  12. ตอนนี้ให้รันคำสั่ง adb devices อีกครั้งจากขั้นตอนที่ 10 และพรอมต์คำสั่ง/เทอร์มินัลจะพิมพ์หมายเลขซีเรียลของอุปกรณ์ของคุณ หากเป็นเช่นนั้น คุณก็พร้อมที่จะเดินหน้าต่อไป ถ้าไม่เช่นนั้น แสดงว่าไดรเวอร์ USB อาจติดตั้งไม่ถูกต้อง
  13. กลับไปที่ Command Prompt แล้วป้อนคำสั่งต่อไปนี้: adb shell
  14. ตอนนี้รันคำสั่งต่อไปนี้: cmd appops set android POST_NOTIFICATION ignore
  15. คุณจะไม่ได้รับข้อความแสดงความสำเร็จหรืออะไรเลย แต่ตราบใดที่คุณไม่เห็นข้อผิดพลาด ก็ควรจะได้ผล ตอนนี้เพียงแค่รีบูทโทรศัพท์ของคุณ!

    ใช่ ฉันรู้ว่านี่เป็นรูปภาพจากหน้าจอโทรศัพท์ ไม่ใช่ภาพหน้าจอ ฉันไม่มีอุปกรณ์ที่รองรับ Android O ดังนั้นฉันจึงขอให้ TK ส่งรูปภาพมาให้ฉัน

  16. หากคุณต้องการคืนค่าคำสั่งนี้ ให้ป้อนสิ่งนี้ลงในพร้อมท์คำสั่ง: cmd appops set android POST_NOTIFICATION allow

มันทำงานอย่างไร

การใช้อินเทอร์เฟซบรรทัดคำสั่งที่ซ่อนอยู่สำหรับ App Ops ซึ่งเป็นระบบจัดการสิทธิ์ที่ผู้ใช้ต้องเผชิญของ Android ทำให้เราสามารถจำกัดสิทธิ์ POST_NOTIFICATION จากแพ็คเกจ "android" ได้ (หมายเหตุ: เรากำลังตั้งค่าเป็น "เพิกเฉย" แทนที่จะเป็น "ปฏิเสธ" เพราะ "ปฏิเสธ" อาจทำให้เกิดข้อผิดพลาดบางอย่าง) ฉันพบการอนุญาตนี้โดยดูที่ซอร์สโค้ดที่เกี่ยวข้องสำหรับ AppOpsManagerซึ่งแสดงรายการสิทธิ์ที่เป็นไปได้ทั้งหมดที่สามารถให้/เพิกถอนได้ ซึ่งส่วนใหญ่ไม่สามารถเข้าถึงได้ในการตั้งค่า Android จริงๆ แล้วแพ็คเกจ "android" หมายถึง "ระบบ Android" AKA framework-res.apk ซึ่งมีหน้าที่รับผิดชอบในการแจ้งเตือนอย่างต่อเนื่องที่เราพยายามกำจัด

ด้วยการเพิกถอนการอนุญาต POST_NOTIFICATION ของระบบ Android เป็นหลัก ระบบจะไม่สามารถแสดงการแจ้งเตือนได้อีกต่อไป! ฟังดูค่อนข้างง่ายใช่ไหม? น่าเสียดายที่มีข้อแม้ที่ต้องระวัง "ระบบ Android" มีหน้าที่มากกว่าการแจ้งเตือนนี้ ดังนั้นการแจ้งเตือนอื่นๆ ที่อาจโพสต์จะไม่แสดงอีกต่อไป ซึ่งอาจรวมถึงการแจ้งเตือนโหมด USB (ซึ่งยังคงสามารถเปลี่ยนได้ผ่านการตั้งค่าในตัวเลือกนักพัฒนา) รวมถึงสิ่งอื่นๆ

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