บันทึก:
- adbควรติดตั้งในพีซีแล้ว
- สำหรับ Android เวอร์ชันที่เก่ากว่า 4.4.x อาจต้องมีการเข้าถึงรูท
- คำสั่งบางอย่างจะไม่ทำงานบน Android ก่อนหน้ารุ่น 5.1
- ข้ามไปที่หัวข้อ " แอปสำหรับแอป " หากคุณไม่คุ้นเคยหรือไม่สบายใจกับบรรทัดคำสั่งและ / หรือบรรทัดคำสั่งไม่สามารถแก้ปัญหาของคุณได้
แก้ไข: ตัดการไล่ล่าในโซลูชันก่อนหน้าและทำตามส่วนที่แก้ไขนี้เท่านั้น
ตั้งค่าadbและเรียกใช้คำสั่งนี้:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
คุณจะได้รับผลลัพธ์ของการวางซ้อนที่ใช้งานอยู่ทั้งหมดบนหน้าจอ ตัวอย่างผลลัพธ์ที่มี DU Screen Recorder, Tasker และ AZ Screen Recorder แสดงภาพซ้อนทับที่ใช้งานอยู่บนหน้าจอ:
bash-4.3 # adb shell "dumpsys windows windows | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = แพคเกจที่แท้จริง = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = แพ็คเกจจริง = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = แพ็คเกจจริง = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = แพคเกจจริง = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = แพคเกจจริง = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = แพ็คเกจจริง = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = แพ็คเกจจริง = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = แพคเกจจริง = appop ninja.sesame.app.edge = SYSTEM_ALERT_WINDOW
ข้อความที่ไฮไลต์ถัดจากpackage =และก่อนappopคือชื่อแพ็กเกจของแอปที่กำลังซ้อนทับบนหน้าจอในปัจจุบัน ในกรณีของคุณเอาต์พุตรวมถึงชื่อแพ็กเกจจะแตกต่างกัน
จดชื่อแพ็คเกจ (ต่อจากนี้ไปเป็น PKG) และเรียกใช้คำสั่งนี้:
adb shell am force-stop PKG
แทนที่PKGด้วยชื่อแพ็คเกจที่คุณจดบันทึกไว้ หากคุณมีชื่อแพ็กเกจหลายชื่อให้ทำซ้ำคำสั่งด้วยชื่อแพ็กเกจทีละชื่อ
คำสั่งจะหยุดแอปอย่างเด็ดขาดและยกเลิกการวางซ้อน สิ่งนี้น่าจะใช้ได้ คุณสามารถสลับการอนุญาตของ "Draw over apps อื่น ๆ " (การซ้อนทับหน้าจอโดยย่อ) จากแอพโดยใช้คำสั่งนี้:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
อีกครั้งแทนที่ PKG ด้วยชื่อแพคเกจตามความจำเป็น นอกจากนี้คุณอาจต้องทำซ้ำคำสั่ง force-stop สำหรับ PKG หากคุณตัดสินใจย้อนกลับการเปลี่ยนแปลงให้แทนที่การเพิกเฉยด้วยการอนุญาตในคำสั่งดังกล่าว
คุณสามารถใช้App Opsเพื่อจัดการการอนุญาตจาก GUI
หากต้องการทราบว่าสอดคล้องกับชื่อแพคเกจที่ app ที่คุณอาจจะลอง app ที่มาเปิดเช่นข้อมูลการใช้งาน ค้นหาตามชื่อแพ็คเกจและคุณจะได้รับชื่อแอพ
แก้ไขเสร็จแล้ว
จริงๆคุณไม่จำเป็นต้องอ่านอีกต่อไปในขณะนี้ ฉันกำลังออกจากโซลูชันก่อนหน้า (เช่นส่วนต่อไปนี้) เหมือนเดิมเพราะมี 21 คนที่โหวตว่าพบว่ามีประโยชน์และฉันไม่ต้องการยุ่งอีกต่อไป
วิธีง่าย ๆ คือค้นหาแอพทั้งหมดที่ได้รับอนุญาต "จั่วแอพอื่น ๆ " จากนั้นแยกออกจากแอปที่ใช้งานอยู่บนหน้าจอในปัจจุบัน หลังจากนั้นให้หยุดการใช้งานแอพทั่วไปเหล่านั้นจนกว่าคุณจะกำหนดแอพที่รับผิดชอบการซ้อนทับที่ใช้งานอยู่
ระบุแอพที่มีสิทธิ์ซ้อนทับ
สิทธิ์ที่แอปพลิเคชันต้องการในการสร้างภาพซ้อนทับคือandroid.permission.SYSTEM_ALERT_WINDOW
(เขียนทับแอพอื่น ๆ )
เราจำเป็นต้องค้นหาแอพที่ติดตั้งทั้งหมดซึ่งได้รับอนุญาตดังกล่าว มันขึ้นอยู่กับคุณที่จะหาวิธีการนี้ คำตอบของฉันที่นี่อาจช่วยคุณได้
โปรดทราบว่าเราต้องการชื่อแพคเกจของแอปไม่ใช่ป้ายกำกับ
Cherry-pick จากหน้าต่างที่ใช้งานอยู่
ดำเนินการคำสั่ง
adb shell dumpsys window windows
สิ่งนี้จะให้รายละเอียดเกี่ยวกับสิ่งที่ทำให้เกิดการแสดงบนหน้าจอรวมถึงชื่อองค์ประกอบของแอพที่ทำให้เกิด
วิธีแยกชื่อขึ้นอยู่กับคุณ คุณอาจลองใช้คำสั่งนี้
adb shell 'dumpsys window windows | grep "Window #"'
หากคุณได้รับข้อผิดพลาด: 'grep' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกบน Windows ลองใช้คำสั่งทางเลือกนี้:
adb shell "dumpsys window windows | grep 'Window #'"
เอาท์พุทสาธิต
หน้าต่าง # 4 หน้าต่าง {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
หน้าต่าง # 5 หน้าต่าง {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
หน้าต่าง # 6 หน้าต่าง {420fdb58 u0 com.android.systemui.ImageWallpaper}:
หน้าต่าง # 7 หน้าต่าง {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity} หน้าต่าง:
ในผลลัพธ์ข้างต้นสิ่งใดก็ตามที่ประสบความสำเร็จ u0
และนำหน้า/
คือชื่อแพ็กเกจของแอป แอปสามารถมีหลายองค์ประกอบที่แสดงบางอย่างบนหน้าจอ
คุณต้องสร้างรายการชื่อแพ็คเกจเหล่านั้น หากคุณติดตั้ง BusyBox ไว้คุณสามารถทำได้
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
อย่างไรก็ตามตอนนี้คุณจะมีสองรายการ:
android.permission.SYSTEM_ALERT_WINDOW
รายการแรกที่มีปพลิเคชันทั้งหมดที่มีได้รับอนุญาต
- รายการที่สองมีแอพทั้งหมดที่แสดงบางอย่างบนหน้าจอ
เปรียบเทียบรายการทั้งสองนี้และแอพเดี่ยวที่ใช้กันทั่วไปในทั้งสองรายการ รายการที่สามนี้ประกอบด้วยแอปที่ได้รับอนุญาตให้วาดภาพซ้อนทับและกำลังวาดภาพซ้อนทับที่ใช้งานอยู่บนหน้าจอ
เวลาฆ่า
ฆ่าแต่ละแอปจากรายการที่สามทีละรายการและสังเกตสถานะของการซ้อนทับ คุณสามารถใช้am force-stop PACKAGE_NAME --user 0
หรือวิธีอื่นใดที่เหมาะกับคุณ PACKAGE_NAME
คือชื่อแพ็คเกจของแอป
แก้ไข : ไม่จำเป็นต้องฆ่าแอพ คุณสามารถพิจารณาปฏิเสธการอนุญาตให้แอปพลิเคชั่นแอปอื่น ๆ ใช้คำสั่งนี้:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
หากต้องการคืนค่าการเปลี่ยนแปลงให้แทนที่denyด้วยallowในคำสั่งดังกล่าวและดำเนินการ
หากคุณใช้ Android Marshmallow คำตอบนี้โดย Andrew T. สามารถใช้ได้
หมายเหตุ:คำสั่งดังกล่าวได้รับการทดสอบบน Android 5.1.1 และ 6.0.1 (การสร้าง CM) สำเร็จ เป็นไปได้ว่าคำสั่งทำงานบน Android 5.0.x แต่ฉันไม่สามารถรับประกันได้ การทำงานของคำสั่งนั้นในเวอร์ชั่น Android ที่วางจำหน่ายก่อน Lollipopจะทำให้เกิดความล้มเหลว
เนื่องจากบ่อยครั้งที่การซ้อนทับสามารถมองเห็นได้มันจะหายไปทันทีที่แอปที่ทำให้เกิดการฆ่าดังนั้นคุณจะรู้ได้ว่าแอปใดที่ทำให้เกิดการซ้อนทับนั้น
แอพสำหรับแอพ
แต่เดิม Izzy แนะนำไว้คุณสามารถใช้แอพที่มีฟังก์ชั่นการอนุญาตให้ใช้สิทธิ์ในการแสดงรายชื่อแอพที่ติดตั้งไว้ คุณสามารถค้นหาแอปด้วยตัวคุณเองหรือใช้รายการตรวจสอบการอนุญาตที่ได้รับการดูแลโดย Izzy บนเว็บไซต์ของเขา
คุณจะต้องมีผู้จัดการกระบวนการ / แอปเพื่อบังคับหยุด / ฆ่ากระบวนการบางอย่าง ฉันแนะนำOS Monitorแต่คุณมีอิสระที่จะใช้แอพที่มีความสามารถใด ๆ ดูปพลิเคชันที่เกี่ยวข้องภายใต้ข้อมูลระบบ
เพื่อการสาธิตเท่านั้น
ฉันลองAdvanced Permission Managerเพื่อแสดงรายการแอพที่ได้รับอนุญาตให้ "วาดทับแอพอื่น ๆ " หลังจากนั้นฉันเปลี่ยนเป็น OS Monitor เพื่อดูแอปที่ทำงานในเบื้องหน้าและพื้นหลัง ฉันจับคู่ผลลัพธ์จากทั้งแอพและบังคับให้แอพทั่วไปหยุดทั้งคู่ คุณสามารถฆ่ากระบวนการจากภายใน OS Monitor ดังนั้นไม่จำเป็นต้องเปลี่ยนไปใช้การตั้งค่าแอพ
(คลิกที่ภาพเพื่อขยาย)