Ekran görüntülerinin algılanmasında daha standartlaştırılmış bir deneyim oluşturmak için Android 14, gizliliği korumaya yönelik bir ekran görüntüsü algılama API'sini kullanıma sunuyor. Bu API, uygulamaların geri çağırmaları etkinlik bazında kaydetmesine olanak tanır. Bu geri çağırma işlevleri çağrılır ve kullanıcı, etkinlik görünürken ekran görüntüsü aldığında bu durumdan kullanıcı bilgilendirilir.
Desteklenen kullanım alanları
Android 14'te sistem API'si, yalnızca kullanıcı donanım düğmesine belirli bir sayıda bastığında ekran görüntüsü algılar. API, ekran görüntüleriyle ilgili test komutlarını (ADB dahil) veya cihazın mevcut ekran içeriklerini yakalayan araç testlerini çalıştırırken alınan ekran görüntülerini algılamaz.
Uygulama adımları
Ekran görüntüsü algılama eklemek için yeni DETECT_SCREEN_CAPTURE
yükleme zamanı iznini beyan edin:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Ardından, uygulamanızda kullanıcıların ekran görüntüsü alabilecekleri 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 işlem gerçekleştirebilir. Örneğin, başka bir kullanıcıyı mesaj görüşmesinin ekran görüntüsünü aldığı 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ğı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ın 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ü yakalama yeteneğini kontrol edin
Bir uygulama etkinliği içeriğinin ekran görüntülerinde veya güvenli olmayan ekranlarda görünmesini istemiyorsanız FLAG_SECURE
görüntü işaretini ayarlayın.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);