Not:
- adb zaten PC'de kurulmuş olmalıdır.
- 4.4.x sürümünden önceki Android için kök erişimi gerekli olabilir.
- Bazı komutlar Android'de 5.1 sürümünden daha önce çalışmaz.
- Komut satırını bilmiyorsanız veya rahatsızsanız ve / veya komut satırı sorununuzu çözemezse " Uygulamalar için uygulamalar " başlığına atlayın .
Düzenleme: takibi önceki çözümde kesin ve sadece bu düzenlenmiş bölümü takip edin.
Kur adb ve bu komutu çalıştırın:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Ekrandaki tüm aktif katmanların çıktısını alırsınız . Ekranda etkin yer paylaşımları gösteren DU Screen Recorder, Tasker ve AZ Screen Recorder ile çıkış örneği:
bash-4.3 # adb shell "dumpsys pencere pencereleri | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = true package = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = gerçek paket = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = gerçek paket = 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 = gerçek paket = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = gerçek paket = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = gerçek paket = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
Package = öğesinin yanındaki ve appop'tan önceki vurgulanan metin , o anda ekranda yer paylaşımlı uygulama çizen uygulamaların paket adlarıdır . Sizin durumunuzda, paket adlarını içeren çıktı farklı olacaktır.
Paket adlarını not edin (bundan böyle PKG kadar) ve bu komutu uygulayın:
adb shell am force-stop PKG
PKG'yi not ettiğiniz paket adıyla değiştirin . Birden fazla paket adınız varsa, komutu bir defada bir paket adıyla tekrarlayın.
Komut, uygulamayı zorla durdurur ve böylece yerleşimi atar. Bu çalışmalı. Alternatif olarak, bu komutu kullanarak uygulamalardan "Diğer uygulamalar üzerinde çizim" (kısaca ekran yer paylaşımı) iznini kaldırabilirsiniz:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Yine, PKG'yi gerektiği şekilde paket adıyla değiştirin. Ayrıca, PKG için zorla durdur komutunu tekrarlamanız gerekebilir. Değişiklikleri geri almaya karar verirseniz, yoksaymayı yukarıda belirtilen komutta allow ile değiştirin .
Alternatif olarak , GUI'nin izinlerini yönetmek için Uygulama Ops'u kullanabilirsiniz .
Hangi paket adının hangi uygulamaya karşılık geldiğini bilmek için Uygulamalar Bilgisi gibi açık kaynaklı bir uygulamayı deneyebilirsiniz . Paket adına göre arama yapın ve Uygulamanın adını alırsınız.
Düzenleme tamamlandı
Artık gerçekten okumaya gerek yok . Önceki çözümü (yani aşağıdaki bölümü) sağlam bırakıyorum çünkü oy veren 21 kişi bunu yararlı buldu ve artık berbat etmek istemiyorum.
Basit bir yol, "diğer uygulamaların üzerine çizim" iznine sahip tüm uygulamaları bulmak ve daha sonra şu anda ekranda aktif olanları bulmaktır. Daha sonra, etkin yer paylaşımından sorumlu uygulamayı belirleyene kadar bu yaygın uygulamaları zorla durdurmaya çalışın.
Yer paylaşımı izni olan uygulamaları numaralandırma
Bir uygulama için yer paylaşımı oluşturmak için gereken izin android.permission.SYSTEM_ALERT_WINDOW
(diğer uygulamalar üzerinde çizim yapmak).
Bu izne sahip kurulu tüm uygulamaları bulmamız gerekiyor. Bunun için bir yöntem bulmak size kalmıştır. Buradaki cevabım size yardımcı olabilir.
Uygulamaların etiketlerine değil paket adlarına ihtiyacımız olduğunu unutmayın .
Aktif pencerelerden kiraz toplama
Komutu yürütün
adb shell dumpsys window windows
Bu, ekranda neden olan bir uygulamanın bileşen adı da dahil olmak üzere ekranda bir şey görüntülenmesine neden olan ayrıntılar verir.
Adı nasıl çıkaracağınız size kalmış. Ancak bu komutu deneyebilirsiniz
adb shell 'dumpsys window windows | grep "Window #"'
Hatayı alırsanız: 'grep' dahili veya harici komut olarak tanınmazsa , Windows'ta şu alternatif komutu deneyin:
adb shell "dumpsys window windows | grep 'Window #'"
Demo çıktı
Pencere # 4 Pencere {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Pencere # 5 Pencere {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Pencere # 6 Pencere {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Pencere # 7 Pencere {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsAktivite}:
Yukarıdaki çıktıda, başarılı u0
ve önceki her şey /
bir uygulamanın paket adıdır. Bir uygulama, ekranda bir şey görüntüleyen birden fazla bileşene sahip olabilir.
Bu paket adlarının bir listesini oluşturmanız gerekir. Eğer varsa BusyBox yüklü yapabileceğiniz
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
Her neyse, şimdi iki listeniz olacaktı:
- İlk liste izne sahip tüm uygulamaları içerir
android.permission.SYSTEM_ALERT_WINDOW
.
- İkinci liste, ekranda aktif olarak bir şey görüntüleyen tüm uygulamaları içerir.
Bu iki listeyi karşılaştırın ve her iki listede de ortak olan tekil uygulamaları. Bu üçüncü liste, yer paylaşımı çizme iznine sahip olan ve şu anda ekranda etkin bir yer paylaşımı çizen uygulamalardan oluşacaktır.
Öldürme zamanı
Üçüncü listeden her bir uygulamayı tek tek öldürün ve yer paylaşımının durumunu görün. Size am force-stop PACKAGE_NAME --user 0
uygun başka bir yöntem kullanabilirsiniz. PACKAGE_NAME
uygulamanın paket adıdır.
EDIT : Bir uygulamayı öldürmek gerekli değildir. Uygulamanın diğer uygulamalar üzerinde çizim yapma iznini reddetmeyi düşünebilirsiniz. Bu komutu kullanın:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Değişiklikleri geri almak için , söz konusu komutta reddet'i izin ver ile değiştirin ve yürütün.
Android Marshmallow kullanıyorsanız, Andrew T. tarafından verilen bu cevap kullanılabilir.
Not: Yukarıda belirtilen komut Android 5.1.1 ve 6.0.1'de (CM derlemeleri) başarıyla test edilmiştir. Komutun Android 5.0.x üzerinde çalışması da mümkündür ancak garanti edemem . Bu komutun Lollipop'tan önce yayınlanan Android sürümünde yürütülmesi başarısızlığa neden olur.
Yer paylaşımı genellikle algılanabilir olduğundan, uygulamaya neden olan uygulama öldürüldüğünde anında kaybolur, dolayısıyla hangi uygulamanın bu yer paylaşımına neden olduğunu bilirsiniz.
Uygulamalar için uygulamalar
Başlangıçta Izzy tarafından önerilen, yüklü uygulamalara verilen izinleri listeleme işlevine sahip bir uygulamayı, "diğer uygulamalar üzerinde çizim" iznine sahip uygulamaları tek tek kullanmak için kullanabilirsiniz. Böyle bir uygulamayı kendi başınıza arayabilir veya web sitesinde Izzy tarafından tutulan İzin İzleyicisi'ni kullanabilirsiniz .
Ayrıca, bazı işlemleri zorla durdurmak / öldürmek için bir işlem / uygulama yöneticisine ihtiyacınız olacaktır. OS Monitor'ü öneriyorum, ancak herhangi bir yetkili uygulamayı kullanma özgürlüğünüz var. Sistem Bilgisi altındaki ilgili uygulamalara bakın .
Sadece tanıtım amaçlı
Gelişmiş izin yöneticisi "diğer uygulamalar üzerinde çizim" izni ile uygulamaları listelemek için çalıştı . Daha sonra, ön planda ve arka planda çalışan uygulamaları görmek için OS Monitor'e geçtim. Her iki uygulamadaki çıktıyla eşleştim ve her ikisinde de ortak olan uygulamaları tek tek zorla durdurdum. OS Monitörü içinden bir işlemi öldürebilirsiniz, bu nedenle Uygulama ayarlarına geçmenize gerek yoktur.
(Büyütmek için resme tıklayın)