catatan:
- adb seharusnya sudah diatur di PC.
- Untuk Android lebih awal dari versi 4.4.x, akses root mungkin diperlukan.
- Beberapa perintah tidak akan berfungsi di Android lebih awal dari versi 5.1.
- Lompat ke tajuk " Aplikasi untuk aplikasi " jika Anda tidak terbiasa atau tidak nyaman dengan baris perintah dan / atau baris perintah gagal menyelesaikan masalah Anda.
Sunting: potong pengejaran dalam solusi sebelumnya dan ikuti bagian yang diedit ini saja.
Setup adb dan jalankan perintah ini:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Anda akan mendapatkan output dari semua overlay aktif di layar. Contoh output dengan DU Screen Recorder, Tasker dan AZ Screen Recorder menampilkan overlay aktif di layar:
bash-4.3 # adb shell "jendela dumpsys windows | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = paket sebenarnya = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = true package = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
Teks yang disorot di sebelah package = dan sebelum appop adalah nama paket aplikasi yang saat ini menggambar overlay di layar. Dalam kasus Anda, output termasuk nama paket akan berbeda.
Catat nama paket (selanjutnya disebut PKG) dan jalankan perintah ini:
adb shell am force-stop PKG
Ganti PKG dengan nama paket yang Anda catat. Jika Anda memiliki beberapa nama paket, ulangi perintah dengan satu nama paket sekaligus.
Perintah akan secara paksa menghentikan aplikasi dan dengan demikian membuang overlay. Ini seharusnya bekerja. Sebagai alternatif, Anda dapat menghapus izin "Draw over other apps" (hamparan layar singkatnya) dari aplikasi menggunakan perintah ini:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Sekali lagi, ganti PKG dengan nama paket seperlunya. Selanjutnya, Anda mungkin harus mengulangi perintah penghentian paksa untuk PKG. Jika Anda memutuskan untuk mengembalikan perubahan, ganti abaikan dengan izinkan dalam perintah di atas.
Anda dapat menggunakan App Ops untuk mengelola izin dari GUI.
Untuk mengetahui nama paket yang sesuai dengan aplikasi mana Anda bisa mencoba aplikasi sumber terbuka seperti Info Aplikasi . Cari berdasarkan nama paket dan Anda akan mendapatkan nama Aplikasi.
Edit selesai
Anda benar - benar tidak perlu membaca lagi sekarang . Saya meninggalkan solusi sebelumnya (yaitu bagian berikut) dengan utuh karena 21 orang yang memilihnya merasa terbantu dan saya tidak ingin mengacaukannya lagi.
Cara sederhana adalah mengetahui semua aplikasi yang memiliki izin "menarik aplikasi lain" dan kemudian memilihnya dari yang saat ini aktif di layar. Setelah itu, lakukan penghentian paksa aplikasi-aplikasi umum tersebut sampai Anda menunjukkan dengan tepat aplikasi yang bertanggung jawab atas overlay aktif.
Menghitung aplikasi yang memiliki izin untuk overlay
Izin yang diperlukan oleh aplikasi untuk membuat overlay adalah android.permission.SYSTEM_ALERT_WINDOW
(menarik aplikasi lain).
Kita perlu mengetahui semua aplikasi yang terinstal memiliki izin tersebut. Terserah Anda untuk mengetahui metode untuk ini. Jawaban saya di sini dapat membantu Anda.
Perhatikan bahwa kita membutuhkan nama paket aplikasi dan bukan labelnya.
Pilih dari jendela aktif
Jalankan perintah
adb shell dumpsys window windows
Ini akan memberi Anda detail tentang apa pun yang menyebabkan sesuatu ditampilkan di layar, termasuk nama komponen aplikasi yang menyebabkannya.
Bagaimana Anda mengekstrak nama itu terserah Anda. Anda dapat mencoba perintah ini
adb shell 'dumpsys window windows | grep "Window #"'
Jika Anda menerima kesalahan: 'grep' tidak dikenali sebagai perintah internal atau eksternal , pada Windows coba perintah alternatif ini:
adb shell "dumpsys window windows | grep 'Window #'"
Output demo
Jendela # 4 Jendela {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Jendela # 5 Jendela {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Jendela # 6 Jendela {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Jendela # 7 Jendela {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
Dalam output di atas, apa pun yang berhasil u0
dan sebelumnya /
adalah nama paket aplikasi. Aplikasi dapat memiliki beberapa komponen yang menampilkan sesuatu di layar.
Anda harus membuat daftar nama paket tersebut. Jika Anda telah menginstal BusyBox , Anda dapat melakukannya
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
Bagaimanapun, sekarang Anda akan memiliki dua daftar:
- Daftar pertama berisi semua aplikasi yang memiliki izin
android.permission.SYSTEM_ALERT_WINDOW
.
- Daftar kedua berisi semua aplikasi yang secara aktif menampilkan sesuatu di layar.
Bandingkan kedua daftar ini dan pilih satu aplikasi yang umum di kedua daftar. Daftar ketiga ini merupakan aplikasi yang memiliki izin untuk menggambar overlay dan saat ini menggambar overlay aktif di layar.
Waktunya membunuh
Bunuh masing-masing aplikasi dari daftar ketiga satu per satu dan perhatikan status overlay. Anda dapat menggunakan am force-stop PACKAGE_NAME --user 0
atau metode lain yang cocok untuk Anda. PACKAGE_NAME
adalah nama paket aplikasi.
EDIT : Tidak perlu mematikan aplikasi. Anda dapat mempertimbangkan untuk menolak aplikasi untuk mengambil alih aplikasi lain. Gunakan perintah ini:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Untuk mengembalikan perubahan, ganti tolak dengan izinkan dalam perintah tersebut dan jalankan.
Jika Anda menjalankan Android Marshmallow, jawaban ini oleh Andrew T. dapat digunakan.
Catatan: Perintah di atas berhasil diuji pada Android 5.1.1 dan 6.0.1 (build CM). Mungkin juga perintah itu bekerja di Android 5.0.x tapi saya tidak bisa menjamin . Eksekusi perintah itu pada versi Android yang dirilis sebelum Lollipop akan menyebabkan kegagalan.
Karena sering overlay dapat dilihat, maka akan langsung menghilang begitu aplikasi menyebabkannya terbunuh, karenanya, Anda akan tahu aplikasi mana yang menyebabkan overlay itu.
Aplikasi untuk aplikasi
Awalnya disarankan oleh Izzy, Anda dapat menggunakan aplikasi yang memiliki fungsionalitas izin daftar yang diberikan untuk aplikasi yang diinstal, untuk memilih aplikasi yang memiliki izin "menarik dari aplikasi lain". Anda dapat mencari aplikasi seperti itu sendiri atau menggunakan daftar Pemeriksa izin yang dikelola oleh Izzy di situs webnya.
Anda juga membutuhkan manajer proses / aplikasi untuk menghentikan / membunuh beberapa proses secara paksa. Saya merekomendasikan OS Monitor tetapi Anda bebas untuk menggunakan aplikasi apa pun yang kompeten. Lihat aplikasi terkait di bawah Info Sistem .
Untuk tujuan demonstrasi saja
Saya mencoba Advanced Permission Manager untuk mendaftar aplikasi dengan izin untuk "menarik aplikasi lain". Setelah itu, saya beralih ke OS Monitor untuk melihat aplikasi yang berjalan di latar depan dan belakang. Saya mencocokkan output dari kedua aplikasi dan secara individual menghentikan aplikasi yang umum di keduanya. Anda dapat mematikan proses dari dalam Monitor OS, jadi tidak perlu beralih ke pengaturan Aplikasi.
(Klik gambar untuk memperbesar)