CoralCrescendo
Kayıtlı Kullanıcı
Android işletim sisteminde, bir uygulamanın başka bir uygulamanın arka planında görünmesini istemesi yaygın bir senaryodur. Bu yetki, “Uygulama Üstte Gösterme İzni” olarak adlandırılır ve sistemde SYSTEMALERTWINDOW olarak bilinir. Kullanıcıya arayüzü engellemeden bilgi vermek, bildirimleri zenginleştirmek veya çoklu görev yönetimini kolaylaştırmak için bu izin kritik bir rol oynar. Ancak, yanlış kullanım güvenlik açıklarına sebep olabilir; bu yüzden izin yönetimi ve uygulama tasarımı konularında titizlik gereklidir.
İzin, Android 6.0 (Marshmallow) öncesinde Manifest dosyasında “SYSTEMALERTWINDOW” etiketiyle tanımlanırdı. 6.0 ve sonrası sürümlerde, bu izin “runtime” olarak kullanıcıya sunulur; uygulama ilk başta bu izni istemez, ancak kullanıcı onay verene kadar overlay gösteremez.
Bu izin, işletim sisteminin “window manager” bileşeni tarafından kontrol edilir. Uygulama, overlay yaratmak istediğinde sistem, izin kontrolünü yapar ve kullanıcıya “Bu uygulamaya ekranın üstünde gösterim izni verilsin mi?” sorusunu gösterir.
İzin verildiğinde, uygulama “TYPEAPPLICATIONOVERLAY” (Android 8.0 ve sonrası) veya “TYPEPHONE” (önceki sürümler) gibi bir pencere türü kullanarak pencereyi oluşturur. Bu pencere türleri, sistemin diğer uygulamalarla nasıl etkileşime geçeceğini belirler.
Son olarak, overlay izinleri, sadece uygulamanın kendi penceresini görüntülemesi için değil, aynı zamanda diğer uygulamaların pencereleri üzerinde de etkileşim kurması için kullanılabilir. Örneğin, bir ekran paylaşım uygulaması, kullanıcıların ekranda bir pencereyi görebilmesi için overlay izni gerektirir.
Android 8.0 (Oreo) ile birlikte, overlay izinleri “TYPEAPPLICATIONOVERLAY” sınıfına geçiş yaparak daha güvenli bir yapı sunar. Bu sınıf, uygulamaların sadece kendi pencerelerini gösterebileceği şekilde sınırlanırken, sistem pencereleriyle çakışmayı önler.
İzin, “android.permission.SYSTEMALERTWINDOW” olarak Manifest’e eklenir, ancak kullanıcı onayı gereklidir. Uygulama, bu izni talep edemediğinde, “Permission Denied” hatası alır ve overlay penceresi gösterilemez.
Android 10 (Q) ve sonrasında overlay izni, “draw over other apps” (diğer uygulamaların üstünde çizim) olarak görsel bir işaretle kullanıcıya sunulur. Bu işaret, kullanıcıyı bilgilendirir ve iznin sistem genelinde nasıl yönetildiğini gösterir.
Eğer uygulama, overlay izniyle kullanıcı deneyimini geliştirmek istiyorsa, izni sorgulamak ve gerekirse kullanıcıyı “Ayarlar → Uygulama izinleri” menüsüne yönlendirmek önemlidir. Bu, kullanıcıya iznin neden gerektiğini açıklayan bir “kılavuz” sunar.
Tarihsel Gelişim ve Versiyon Dönüş
Android’in ilk sürümlerinde, “draw over other apps” izni doğrudan Manifest’e eklenir ve kullanıcıdan bir onay istenmez. Bu durum, kötü niyetli uygulamaların sahte reklamlar veya sahte arayüzler ekleyerek kullanıcı deneyimini bozmasına yol açtı. 6.0 (Marshmallow) ile başlayan “runtime permission” modelinde, overlay izni bir “dangerous” kategoriye taşındı; kullanıcı, uygulamanın bu izni kullanabilmesi için açıkça onay vermek zorundaydı.
7.0 (Nougat) ve 8.0 (Oreo) döneminde ise “TYPEPHONE” ve “TYPESYSTEMALERT” gibi pencere türleri, güvenlik açıklarını azaltmak için sınırlandırıldı. Özellikle Oreo’da, “TYPEAPPLICATIONOVERLAY” sınıfı tanıtıldı ve bu sınıf, uygulamaların sadece kendi pencerelerini gösterebilmesini sağladı. Böylece sistemin kritik pencereleri (örneğin, telefon araması, bildirim çubuğu) overlay ile çakışma riskleri hafifledi.
Android 9 (Pie) ile birlikte, overlay izinleri “draw over other apps” düğmesiyle birlikte “App info” ekranında görünür hale geldi. Kullanıcılar, izni tek tek uygulamalara özgü olarak kapatıp açabildi. Bu, kullanıcıların gizlilik kontrolünü artırdı.
Android 10 (Q) ve sonrası sürümler, overlay izninin “background” kullanımını daha da sınırlandırdı; uygulamalar, arka planda çalışırken bu izni kullanabilmek için ekstra “SYSTEMALERTWINDOW” onayı gerekiyordu. Android 11’de ise “overlay” izni, “doze” ve “standby” modlarında otomatik olarak kapatıldı, bu da enerji tasarrufu ve güvenlik için önemli bir adım oldu.
Son olarak, Android 12 (S) ile birlikte “Overlay Permission” için “Permission request dialogues” yeniden tasarlandı; kullanıcılar, iznin ne zaman ve hangi şartlarda kullanılacağını daha net görebildi. Bu değişiklik, geliştiricilerin izni daha şeffaf bir şekilde talep etmelerini ve kullanıcıların bu izni kabul etmeleri durumunda uygulamanın kullanımına dair daha fazla bilgi edinmelerini sağladı.
Bununla birlikte, aşırı overlay kullanımı kullanıcıyı rahatsız edebilir. Çok sayıda pencere, ekranı doldurur, dokunmatik etkileşimi zorlaştırır ve bilgi akışını bozar. Bu nedenle, geliştiricilerin overlay pencerelerini yalnızca gerçekten gerekli olduğunda açmaları önerilir.
Modern Android sürümlerinde, “WindowInsets” API’si overlay pencerelerinin sistem çubuğu ve nav bar ile çakışmasını önler. Bu sayede, overlay penceresi, ekranın üst kısmında gizli alan (notch) veya alt kısmında gezinme çubuğuna zarar vermeden yerleştirilebilir.
Overlay pencerelerinin genişliği ve yüksekliği, “WindowManager.LayoutParams” içinde belirlenir. Genişlik genellikle “WRAPCONTENT” veya “MATCHPARENT” olarak ayarlanır; yüksekliği ise “WRAPCONTENT” olarak kalır. Bu, pencerelerin ekranı tamamen kaplamadan, içeriğe göre otomatik boyutlanmasını sağlar.
Bu riskleri azaltmak için Android, “secure flag” (FLAGSECURE) özelliğini sunar. Bu bayrak, pencerenin ekran kaydı veya ekran görüntüsü alındığında gizlenmesini sağlar. Örneğin, bir bankacılık uygulaması, kullanıcı arayüzünü overlay ile gösterirken FLAGSECURE bayrağını ekleyerek, ekran görüntüsü atılmasını önler.
Ayrıca, “applicationId” ve “signature” doğrulaması ile yalnızca belirli uygulamaların overlay pencereleri açmasına izin verilebilir. Bu, sistemin “overlay” içeren uygulamaları sınırlı bir listeyle kontrol etmesine olanak tanır.
Android 10’da, “overlay” izni için “AppOpsManager” API’siyle daha ince kontrol sağlanır. Geliştiriciler, uygulamanın izin kullanımını izleyebilir ve kullanıcı onayı olmadan overlay penceresi açmaya çalıştıklarında uygulamayı durdurabilir.
Oyun içi rehberlik sistemleri, oyuncunun ekranının üst kısmına oyun içi ipuçları veya harita göstergeleri ekleyerek, kullanıcı deneyimini zenginleştirir. Örneğin, “Genshin Impact”’ta, küresel harita overlay’i oyuncunun ekranının üst kısmında belirir.
Ekran paylaşım ve video konferans uygulamaları, video akışını overlay penceresi olarak sunar; bu sayede kullanıcı, konuşma sırasında diğer uygulamaları görebilir. Örneğin, “Zoom”’da, video penceresi ekranın üst kısmında kalır.
Performansı optimize etmek için, overlay pencerelerinin sayısı minimumda tutulmalı, gereksiz pencereler kapatılmalı ve “hardware acceleration” (donanım hızlandırma) kullanılmalıdır. “SurfaceView” yerine “TextureView” kullanmak, donanım kaynaklarını daha verimli kullanabilir.
Ayrıca, overlay pencerelerinin “layer” seviyesini düşürmek, ekran çizim sırasını optimize eder. Örneğin, “TYPEAPPLICATIONOVERLAY” ile “TYPEPHONE” arasında farklı “layer” seviyeleri bulunur; doğru seviyenin seçilmesi, çakışma ve performans sorunlarını azaltır.
Ayrıca, “AppOps” API’si ile geliştiriciler, overlay izni kullanımını daha ayrıntılı izleyebilir. Örneğin, “MODEALLOWED” ve “MODEIGNORED” durumları arasında geçiş yaparak, izni dinamik olarak kontrol edebilirler.
Android 12, “display cutout” ve “rounded corners” gibi yeni ekran özelliklerini destekler. Overlay pencereleri bu alanlara otomatik olarak uyum sağlar; bu, uygulamaların daha sorunsuz bir görünüm sunmasını sağlar.
Son olarak, “overlay” izni, “Doze” ve “App Standby” modu içinde otomatik olarak kapatılır; bu, enerji tasarrufu ve güvenlik için önemli bir gelişmedir.
2. Kullanıcıya Açıklama Sunun – Overlay izni talep etmeden önce, kullanıcıya “neden bu izne ihtiyaç duyduğumuzu” açıklayan bir dialog gösterin.
3. FLAGSECURE Kullanımı – Hassas bilgiler içeren pencerelerde FLAGSECURE bayrağını ekleyerek ekran görüntüsü ve kaydı önleyin.
4. Layer Yönetimi – “WindowManager.LayoutParams”’ta “type” ve “flags” değerlerini dikkatlice ayarlayarak çakışmayı azaltın.
5. Performansı İzleyin – “Systrace” ve “Android Profiler” ile overlay pencerelerinin GPU/CPU kullanımını izleyin.
6. Kullanıcı Deneyimini Test Edin – Farklı ekran boyutları ve telefon modellerinde overlay pencerelerinin nasıl göründüğünü test edin.
7. Kullanıcı İzni Sonrası Kontrol – İzin verildikten sonra overlay penceresini açmadan önce “Settings.canDrawOverlays(context)” kontrolü yapın.
8. İzin Değişikliği Durumunda – Kullanıcı izni kaldırırsa, uygulamanızın overlay penceresini otomatik olarak kapatacak bir mekanizma ekleyin.
9. Güvenlik Güncellemelerini Takip Edin – Android sürümlerinin overlay güvenlik iyileştirmelerini takip ederek kodunuzda gerekli güncellemeleri yapın.
10. Alternatif Yaklaşımlar – Mümkünse “Notification” API’si veya “floating widget” yerine “system tray” kullanarak overlay yerine farklı kullanıcı arayüzü çözümleri düşünün.
Temel Kavramlar ve Tanım
Android’de “Overlay” kavramı, bir uygulamanın ekranın üstünde, diğer bütün uygulamaların üzerinde görünmesini sağlar. Bu, genellikle “floating window” olarak adlandırılır ve kullanıcı arayüzünde son derece görünür bir etki yaratır. Örneğin, çalma kontrolleri, anlık sohbet pencereleri veya oyun içi anahtarlar bu mekanizmayı kullanır.İzin, Android 6.0 (Marshmallow) öncesinde Manifest dosyasında “SYSTEMALERTWINDOW” etiketiyle tanımlanırdı. 6.0 ve sonrası sürümlerde, bu izin “runtime” olarak kullanıcıya sunulur; uygulama ilk başta bu izni istemez, ancak kullanıcı onay verene kadar overlay gösteremez.
Bu izin, işletim sisteminin “window manager” bileşeni tarafından kontrol edilir. Uygulama, overlay yaratmak istediğinde sistem, izin kontrolünü yapar ve kullanıcıya “Bu uygulamaya ekranın üstünde gösterim izni verilsin mi?” sorusunu gösterir.
İzin verildiğinde, uygulama “TYPEAPPLICATIONOVERLAY” (Android 8.0 ve sonrası) veya “TYPEPHONE” (önceki sürümler) gibi bir pencere türü kullanarak pencereyi oluşturur. Bu pencere türleri, sistemin diğer uygulamalarla nasıl etkileşime geçeceğini belirler.
Son olarak, overlay izinleri, sadece uygulamanın kendi penceresini görüntülemesi için değil, aynı zamanda diğer uygulamaların pencereleri üzerinde de etkileşim kurması için kullanılabilir. Örneğin, bir ekran paylaşım uygulaması, kullanıcıların ekranda bir pencereyi görebilmesi için overlay izni gerektirir.
Android Overlay Permission (SYSTEMALERTWINDOW) Tanımı
Bu izin, kullanıcıya uygulamanın arka plan işlemlerine müdahale etmeden ek bilgi sunma imkânı tanır. Android 6.0’dan itibaren bu izni almak için “requestOverlayPermission” API’si kullanılır; kullanıcı onay vermezse, sistem bu izni otomatik olarak kabul etmez.Android 8.0 (Oreo) ile birlikte, overlay izinleri “TYPEAPPLICATIONOVERLAY” sınıfına geçiş yaparak daha güvenli bir yapı sunar. Bu sınıf, uygulamaların sadece kendi pencerelerini gösterebileceği şekilde sınırlanırken, sistem pencereleriyle çakışmayı önler.
İzin, “android.permission.SYSTEMALERTWINDOW” olarak Manifest’e eklenir, ancak kullanıcı onayı gereklidir. Uygulama, bu izni talep edemediğinde, “Permission Denied” hatası alır ve overlay penceresi gösterilemez.
Android 10 (Q) ve sonrasında overlay izni, “draw over other apps” (diğer uygulamaların üstünde çizim) olarak görsel bir işaretle kullanıcıya sunulur. Bu işaret, kullanıcıyı bilgilendirir ve iznin sistem genelinde nasıl yönetildiğini gösterir.
Eğer uygulama, overlay izniyle kullanıcı deneyimini geliştirmek istiyorsa, izni sorgulamak ve gerekirse kullanıcıyı “Ayarlar → Uygulama izinleri” menüsüne yönlendirmek önemlidir. Bu, kullanıcıya iznin neden gerektiğini açıklayan bir “kılavuz” sunar.
Tarihsel Gelişim ve Versiyon Dönüş
ümü
Android’in ilk sürümlerinde, “draw over other apps” izni doğrudan Manifest’e eklenir ve kullanıcıdan bir onay istenmez. Bu durum, kötü niyetli uygulamaların sahte reklamlar veya sahte arayüzler ekleyerek kullanıcı deneyimini bozmasına yol açtı. 6.0 (Marshmallow) ile başlayan “runtime permission” modelinde, overlay izni bir “dangerous” kategoriye taşındı; kullanıcı, uygulamanın bu izni kullanabilmesi için açıkça onay vermek zorundaydı. 7.0 (Nougat) ve 8.0 (Oreo) döneminde ise “TYPEPHONE” ve “TYPESYSTEMALERT” gibi pencere türleri, güvenlik açıklarını azaltmak için sınırlandırıldı. Özellikle Oreo’da, “TYPEAPPLICATIONOVERLAY” sınıfı tanıtıldı ve bu sınıf, uygulamaların sadece kendi pencerelerini gösterebilmesini sağladı. Böylece sistemin kritik pencereleri (örneğin, telefon araması, bildirim çubuğu) overlay ile çakışma riskleri hafifledi.
Android 9 (Pie) ile birlikte, overlay izinleri “draw over other apps” düğmesiyle birlikte “App info” ekranında görünür hale geldi. Kullanıcılar, izni tek tek uygulamalara özgü olarak kapatıp açabildi. Bu, kullanıcıların gizlilik kontrolünü artırdı.
Android 10 (Q) ve sonrası sürümler, overlay izninin “background” kullanımını daha da sınırlandırdı; uygulamalar, arka planda çalışırken bu izni kullanabilmek için ekstra “SYSTEMALERTWINDOW” onayı gerekiyordu. Android 11’de ise “overlay” izni, “doze” ve “standby” modlarında otomatik olarak kapatıldı, bu da enerji tasarrufu ve güvenlik için önemli bir adım oldu.
Son olarak, Android 12 (S) ile birlikte “Overlay Permission” için “Permission request dialogues” yeniden tasarlandı; kullanıcılar, iznin ne zaman ve hangi şartlarda kullanılacağını daha net görebildi. Bu değişiklik, geliştiricilerin izni daha şeffaf bir şekilde talep etmelerini ve kullanıcıların bu izni kabul etmeleri durumunda uygulamanın kullanımına dair daha fazla bilgi edinmelerini sağladı.
Kullanıcı Deneyimini Optimize Etmek İçin Overlay Kullanımı
Overlay uygulamaları, kullanıcıya ek bilgi sunmak, hızlı erişim sağlamak veya çoklu görev yönetimini kolaylaştırmak için sıklıkla tercih edilir. Örneğin, bir müzik çalar uygulaması, ekranın üstünde sabit kalan bir mini kontrol paneli sunar; bu panel, kullanıcı başka bir uygulamaya geçerken bile kontrolü elinde tutar.Bununla birlikte, aşırı overlay kullanımı kullanıcıyı rahatsız edebilir. Çok sayıda pencere, ekranı doldurur, dokunmatik etkileşimi zorlaştırır ve bilgi akışını bozar. Bu nedenle, geliştiricilerin overlay pencerelerini yalnızca gerçekten gerekli olduğunda açmaları önerilir.
Modern Android sürümlerinde, “WindowInsets” API’si overlay pencerelerinin sistem çubuğu ve nav bar ile çakışmasını önler. Bu sayede, overlay penceresi, ekranın üst kısmında gizli alan (notch) veya alt kısmında gezinme çubuğuna zarar vermeden yerleştirilebilir.
Overlay pencerelerinin genişliği ve yüksekliği, “WindowManager.LayoutParams” içinde belirlenir. Genişlik genellikle “WRAPCONTENT” veya “MATCHPARENT” olarak ayarlanır; yüksekliği ise “WRAPCONTENT” olarak kalır. Bu, pencerelerin ekranı tamamen kaplamadan, içeriğe göre otomatik boyutlanmasını sağlar.
Overlay İzniyle İlgili Güvenlik Riskleri ve Önlemler
Overlay izni, kötü amaçlı yazılımların sahte arayüzler oluşturarak kullanıcıyı yanıltmasını mümkün kılar. Örneğin, bir sahte giriş formu, gerçek bir uygulamanın üstüne yerleştirilebilir ve kullanıcıdan şifre gibi hassas bilgileri toplamak için kullanılabilir.Bu riskleri azaltmak için Android, “secure flag” (FLAGSECURE) özelliğini sunar. Bu bayrak, pencerenin ekran kaydı veya ekran görüntüsü alındığında gizlenmesini sağlar. Örneğin, bir bankacılık uygulaması, kullanıcı arayüzünü overlay ile gösterirken FLAGSECURE bayrağını ekleyerek, ekran görüntüsü atılmasını önler.
Ayrıca, “applicationId” ve “signature” doğrulaması ile yalnızca belirli uygulamaların overlay pencereleri açmasına izin verilebilir. Bu, sistemin “overlay” içeren uygulamaları sınırlı bir listeyle kontrol etmesine olanak tanır.
Android 10’da, “overlay” izni için “AppOpsManager” API’siyle daha ince kontrol sağlanır. Geliştiriciler, uygulamanın izin kullanımını izleyebilir ve kullanıcı onayı olmadan overlay penceresi açmaya çalıştıklarında uygulamayı durdurabilir.
En Popüler Overlay Uygulama Örnekleri
Çoklu görev yönetimi uygulamaları, kullanıcıların eş zamanlı olarak birden fazla uygulamayı görmesini sağlar. Örneğin, “Microsoft Teams” ve “Slack” gibi iletişim uygulamaları, sohbet pencerelerini overlay olarak gösterebilir.Oyun içi rehberlik sistemleri, oyuncunun ekranının üst kısmına oyun içi ipuçları veya harita göstergeleri ekleyerek, kullanıcı deneyimini zenginleştirir. Örneğin, “Genshin Impact”’ta, küresel harita overlay’i oyuncunun ekranının üst kısmında belirir.
Ekran paylaşım ve video konferans uygulamaları, video akışını overlay penceresi olarak sunar; bu sayede kullanıcı, konuşma sırasında diğer uygulamaları görebilir. Örneğin, “Zoom”’da, video penceresi ekranın üst kısmında kalır.
Overlay İzniyle İlgili Performans Sorunları
Overlay pencereleri, sistemin “window manager” bileşenine ek yük getirir. Çok sayıda overlay penceresi açıldığında, sistemin GPU ve CPU kaynakları yoğun bir şekilde tüketilebilir. Bu, cihazın batarya ömrünü azaltır ve ekranın yanıt süresini yavaşlatır.Performansı optimize etmek için, overlay pencerelerinin sayısı minimumda tutulmalı, gereksiz pencereler kapatılmalı ve “hardware acceleration” (donanım hızlandırma) kullanılmalıdır. “SurfaceView” yerine “TextureView” kullanmak, donanım kaynaklarını daha verimli kullanabilir.
Ayrıca, overlay pencerelerinin “layer” seviyesini düşürmek, ekran çizim sırasını optimize eder. Örneğin, “TYPEAPPLICATIONOVERLAY” ile “TYPEPHONE” arasında farklı “layer” seviyeleri bulunur; doğru seviyenin seçilmesi, çakışma ve performans sorunlarını azaltır.
Android 12 ve Sonrası Yenilikler
Android 12, “overlay” izni için “Permission Request Dialog” tasarımını yeniden gözden geçirdi. Kullanıcılar, iznin hangi uygulama tarafından ve hangi amaçla gerektiğini daha net görebilir.Ayrıca, “AppOps” API’si ile geliştiriciler, overlay izni kullanımını daha ayrıntılı izleyebilir. Örneğin, “MODEALLOWED” ve “MODEIGNORED” durumları arasında geçiş yaparak, izni dinamik olarak kontrol edebilirler.
Android 12, “display cutout” ve “rounded corners” gibi yeni ekran özelliklerini destekler. Overlay pencereleri bu alanlara otomatik olarak uyum sağlar; bu, uygulamaların daha sorunsuz bir görünüm sunmasını sağlar.
Son olarak, “overlay” izni, “Doze” ve “App Standby” modu içinde otomatik olarak kapatılır; bu, enerji tasarrufu ve güvenlik için önemli bir gelişmedir.
Uzman Önerileri ve İpuçları
1. İznin Kapsamını Sınırlayın – Kullanıcının ihtiyaç duyduğu minimum overlay düzenini sağlamak için izin talebini sadece gerekli olduğunda yapın.2. Kullanıcıya Açıklama Sunun – Overlay izni talep etmeden önce, kullanıcıya “neden bu izne ihtiyaç duyduğumuzu” açıklayan bir dialog gösterin.
3. FLAGSECURE Kullanımı – Hassas bilgiler içeren pencerelerde FLAGSECURE bayrağını ekleyerek ekran görüntüsü ve kaydı önleyin.
4. Layer Yönetimi – “WindowManager.LayoutParams”’ta “type” ve “flags” değerlerini dikkatlice ayarlayarak çakışmayı azaltın.
5. Performansı İzleyin – “Systrace” ve “Android Profiler” ile overlay pencerelerinin GPU/CPU kullanımını izleyin.
6. Kullanıcı Deneyimini Test Edin – Farklı ekran boyutları ve telefon modellerinde overlay pencerelerinin nasıl göründüğünü test edin.
7. Kullanıcı İzni Sonrası Kontrol – İzin verildikten sonra overlay penceresini açmadan önce “Settings.canDrawOverlays(context)” kontrolü yapın.
8. İzin Değişikliği Durumunda – Kullanıcı izni kaldırırsa, uygulamanızın overlay penceresini otomatik olarak kapatacak bir mekanizma ekleyin.
9. Güvenlik Güncellemelerini Takip Edin – Android sürümlerinin overlay güvenlik iyileştirmelerini takip ederek kodunuzda gerekli güncellemeleri yapın.
10. Alternatif Yaklaşımlar – Mümkünse “Notification” API’si veya “floating widget” yerine “system tray” kullanarak overlay yerine farklı kullanıcı arayüzü çözümleri düşünün.