Android 14, ekran görüntülerinin algılanması için daha standart bir deneyim oluşturmak amacıyla gizliliği korumaya yönelik bir ekran görüntüsü algılama API'si sunar. Bu API, uygulamaların etkinlik bazında geri çağırma işlevleri kaydetmesine olanak tanır. Bu geri çağırmalar, kullanıcı bu etkinlik görünürken ekran görüntüsü aldığında çağrılır ve kullanıcı bilgilendirilir.
Desteklenen kullanım alanları
Android 14'te sistem API'si, yalnızca kullanıcı belirli bir donanım düğmesi kombinasyonuyla basarsa ekran görüntüsünü algılar. API, ADB dahil olmak üzere ekran görüntüleriyle ilgili test komutları çalıştırılırken veya cihazın mevcut ekran içeriklerini 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 bildirin:
<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ı tamamlayın:
onScreenCapture()
işlevini geçersiz kılarak bir geri çağırma uygulayın. Bu geri çağırmada uygulamanız, başka bir kullanıcıyı mesajlaşma görüşmesinin ekran görüntüsünü alan biri konusunda uyarmak gibi işlemler yapabilir.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ğırmasını 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ğırmasını kayıttan çıkarın: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 etkinlik 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);