ตรวจสอบว่าแอพใดกำลังวาดบนแอพอื่น ๆ ?


21

มีวิธีการตรวจสอบแอพพลิเคชั่นตัวใดที่อยู่ด้านบนของแอพพลิเคชั่นอื่นหรือไม่?

ตัวอย่างเช่นแอพ Facebook Messenger สามารถวาดฟองการแชทที่ด้านบนของทุกสิ่ง แต่ฉันจะรู้ได้อย่างไรว่าแอพใดกำลังทำสิ่งนี้อยู่

ปัญหาของฉัน:

ฉันมีแอพที่วาดโฆษณาอยู่ด้านบนของทุกอย่างและฉันอยากรู้ว่าแอปใดกำลังทำสิ่งนี้อยู่ ไม่เพียงถอนการติดตั้ง แต่เตือนทุกคนที่ใช้แอพนี้ (ฉันไม่ได้ติดตั้งแอปพลิเคชันใด ๆ เมื่อเร็ว ๆ นี้และฉันได้ตรวจสอบการอัปเดตล่าสุดแล้ว)

ฉันพยายามใช้Dump View Hierarchy สำหรับ UI Automatorจาก Android Studio แต่ดูเหมือนว่าไม่สามารถเลือกแอปพลิเคชันที่วาดอยู่ด้านบนได้

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

หน้าจอ Android Studio


เพียงเพิ่มปัญหาที่ระบุไว้ในคำตอบด้านล่าง (เพื่อพยายามทำให้เสร็จสมบูรณ์) ใน TouchWiz (Samsung Galaxy ของฉันคือ Note 4) การปิดแผงปุ่มด้านข้างช่วยแก้ปัญหานี้ให้ฉันได้
0xc0de

สำหรับผู้ที่ไม่ใช่นักพัฒนาเพียงตรวจสอบรายการแอพได้ที่นี่: android.stackexchange.com/questions/154274/…
Jonathan

คำตอบ:


24

บันทึก:

  • ควรติดตั้งในพีซีแล้ว
  • สำหรับ Android เวอร์ชันที่เก่ากว่า 4.4.x อาจต้องมีการเข้าถึงรูท
  • คำสั่งบางอย่างจะไม่ทำงานบน Android ก่อนหน้ารุ่น 5.1
  • ข้ามไปที่หัวข้อ " แอปสำหรับแอป " หากคุณไม่คุ้นเคยหรือไม่สบายใจกับบรรทัดคำสั่งและ / หรือบรรทัดคำสั่งไม่สามารถแก้ปัญหาของคุณได้

แก้ไข: ตัดการไล่ล่าในโซลูชันก่อนหน้าและทำตามส่วนที่แก้ไขนี้เท่านั้น

ตั้งค่าและเรียกใช้คำสั่งนี้:

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 ดังนั้นไม่จำเป็นต้องเปลี่ยนไปใช้การตั้งค่าแอพ

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

IMG: IMG: IMG:


1
ขอบคุณมาก Firelord ฉันได้เรียนรู้มากมายกับโพสต์ของคุณ!
andreroggeri

1
ขอบคุณรายชื่อหน้าต่างเป็นเครื่องมือช่วยชีวิตเมื่อฉันพยายามค้นหาแอพแอดแวร์ที่ดูเหมือนจะสามารถดึงดูดทุกอย่าง ... โดยไม่ได้รับอนุญาต "วาดแอปอื่น ๆ "
Craig Ringer

3

หากคุณใช้ Android 6.0 Marshmallow คุณสามารถใช้ตัวจัดการการอนุญาตดั้งเดิม

จากบทความเกี่ยวกับ BGR ,

Android 6.0 Marshmallow มีคุณสมบัติใหม่ที่คาดว่าจะสูงและหนึ่งในนั้นคือสิ่งที่ผู้ใช้ iPhone มีมานานหลายปีแล้ว: การอนุญาตแอพที่ละเอียด Phone Arena ติดตั้งตัวอย่างล่าสุดสำหรับนักพัฒนา Marshmallow และโพสต์คำแนะนำที่ยอดเยี่ยมเพื่อช่วยให้ผู้ใช้ Android แน่ใจว่าพวกเขากำลังแบ่งปันข้อมูลกับแอพที่พวกเขาต้องการแชร์โดยเฉพาะ

ในการเข้าถึงคุณลักษณะการจัดการการอนุญาตของ Marshmallow คุณจะต้องเปิดเมนูการตั้งค่าของคุณแล้วคลิกที่ส่วนแอพ จากนั้นคลิกที่ไอคอนเกียร์ที่จะให้ตัวเลือกเพื่อไปที่ตัวจัดการการอนุญาตของแอพ

การแสดงรายชื่อปพลิเคชันที่สามารถวาดมากกว่าปพลิเคชันอื่น ๆ ให้ไปที่การตั้งค่า - Apps - (เมนูที่มีไอคอนรูปเฟือง) ขั้นสูง - วาดมากกว่าปพลิเคชันอื่น

นอกจากนี้คุณยังสามารถเปิด / ปิดการใช้งานคุณสมบัตินี้ชั่วคราวโดยการแตะที่แอพและสลับ "อนุญาตให้วาดภาพบนแอพอื่น ๆ "

ตัวจัดการการอนุญาต Android M

รูปภาพมารยาทของSebastiano Gottardo ใน Medium


1
สำหรับฉันแล้ว Advanced (เมนูที่มีไอคอนรูปเฟือง) หายไป แต่กลับเป็นไอคอน dotdotdot ด้านบน / ขวาแทน การกำหนดค่าแอพ
AnneTheAgile

3

ขอบคุณมัด @Firelord! ในที่สุดฉันก็พบแอพที่ป้องกันไม่ให้ฉันติดตั้ง apk และทำการสำรองข้อมูล adb

สำหรับฉันฉันพบว่ามันเป็นแอพที่เรียกว่าBattery Mixอ่านเพื่อดูว่าฉันทำอะไรและทำอย่างไร

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

หลายคนมีปัญหากับการติดตั้ง apk และไม่สามารถกด 'ติดตั้ง' ได้ คำตอบทั้งหมดที่ฉันพบได้ส่วนใหญ่จะแสดงแอพลดแสงการย้อมสีและการประหยัดพลังงาน เนื่องจากฉันไม่ได้ใช้งานหรือลบแอพที่คล้ายกันออกทั้งหมดฉันพยายามดิ้นรนเพื่อค้นหาว่าเกิดอะไรขึ้นและแอปใดเป็นตัวการ และในที่สุดก็! หลังจากใช้คำสั่งง่ายๆและการค้นหาอย่างรวดเร็วคำสั่งนั้นจะถูกแก้ไข: D

แอพที่ละเมิดBattery Mixเป็นแอพตรวจสอบแบตเตอรี่ที่เรียบง่ายซึ่งมีฟังก์ชั่นที่ฉันใช้เพื่อแสดงเส้นบาง ๆ ที่ด้านบนของหน้าจอเพื่อแสดงสถานะของระดับแบตเตอรี่ (แอพเล็ก ๆ น้อย ๆ ที่ยอดเยี่ยม)

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

ดำเนินการคำสั่งจากพีซี

adb shell dumpsys window windows > dumpsys-windows.txt

ค้นหา

SYSTEM_ALERT_WINDOW

ในการค้นหาแอปพลิเคชันที่ละเมิดฉันค้นหาสตริงด้านบน

ซึ่งทำให้ฉันบรรทัด:

mOwnerUid=10129 mShowToOwnerOnly=true package=jp.smapho.battery_mix appop=SYSTEM_ALERT_WINDOW

(ดูการอัพโหลดรูปภาพสำหรับส่วนของไฟล์ข้อความ) ป้อนคำอธิบายรูปภาพที่นี่

ฉันจำได้ทันทีว่าแอปใดที่อ้างถึง: jp.smapho battery_mix

ดังนั้นตอนนี้ฉันรู้ที่จะฆ่าแอพนั้นเมื่อใดก็ตามที่ฉันวางแผนที่จะไซด์โหลดหรือสำรองข้อมูล adb


-1

สำหรับ Android Marshmallow และ Oxygen 3.0.2, การปิดการใช้งานป๊อปอัพเค้าโครงหน้าจอ

ไปที่แอพและกำหนดค่าแอพและเลือกวาดบนแอพอื่น ๆ

ไปและเลือกแอปเพื่อปิดการใช้งานเพื่อให้แอปไม่ได้ถูกบล็อกจากการคงรูปแบบหน้าจอ และแอปสามารถรับการอนุญาตโดยตรง

ไปที่แอพและการอนุญาตที่เกี่ยวข้องและเปิดใช้งานการอนุญาตที่คุณต้องการ

สนุก

ราชา


2
ข้อมูลทั้งหมดนี้มีอยู่ในคำตอบของ Andrew T แล้ว คุณไม่จำเป็นต้องโพสต์คำตอบใหม่เพื่อทำซ้ำคำแนะนำเดิม บันทึกความพยายามของคุณสำหรับคำถามที่ยังไม่ได้รับคำตอบ :-)
Dan Hulme
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.