Android 14, ekran görüntülerini algılamayla ilgili daha standart bir deneyim oluşturmak için gizliliği korumaya yönelik bir ekran görüntüsü algılama API'si sunar. Bu API, uygulamaların etkinlik başına geri çağırma işlevleri kaydetmesine olanak tanır. Bu geri çağırma işlevleri çağrılır ve kullanıcı, söz konusu etkinlik görünür durumdayken ekran görüntüsü aldığında bilgilendirilir.
Desteklenen kullanım alanları
Android 14'te sistem API'si, ekran görüntüsünü yalnızca kullanıcı belirli bir donanım düğmesine basma kombinasyonu gerçekleştirirse algılar. API, ADB dahil olmak üzere ekran görüntüleriyle ilgili test komutları çalıştırıldığında veya cihazın mevcut ekran içeriğini yakalayan enstrümantasyon testlerinde alınan ekran görüntülerini algılamaz.
Uygulama adımları
Ekran görüntüsü algılama özelliğini eklemek için yeni DETECT_SCREEN_CAPTURE
yükleme zamanı iznini belirtin:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Ardından, uygulamanızda kullanıcıların ekran görüntüsü alabileceği her etkinlik için aşağıdaki adımları uygulayın:
onScreenCapture()
işlevini geçersiz kılarak geri çağırma işlevi uygulayın. Bu geri çağırma sırasında uygulamanız işlem yapabilir (ör. başka bir kullanıcıyı bir mesajlaşma görüşmesinin ekran görüntüsünü aldığını konusunda uyarabilir).Kotlin
val screenCaptureCallback = Activity.ScreenCaptureCallback { // Add logic to take action in your app. }
Java
final Activity.ScreenCaptureCallback screenCaptureCallback = new Activity.ScreenCaptureCallback() { @Override public void onScreenCaptured() { // Add logic to take action in your app. } };
Etkinliğin
onStart()
yönteminde ekran görüntüsü geri çağırma işlevini kaydedin.Kotlin
override fun onStart() { super.onStart() // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(mainExecutor, screenCaptureCallback) }
Java
@Override protected void onStart() { super.onStart(); // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(executor, screenCaptureCallback); }
Etkinliğin
onStop()
yönteminde, ekran görüntüsü geri çağırma işlevinin kaydını silin:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Ekran görüntüsü alma özelliğini kontrol etme
Bir uygulamanın etkinliğinin içeriğinin ekran görüntülerinde veya güvenli olmayan ekranlarda görünmesini istemiyorsanız FLAG_SECURE
görüntüleme işaretini ayarlayın.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);