Kullanıcıların cihaz ekran görüntüsü almasını algılama

Mesajda "Pay uygulaması bu ekran görüntüsünü algıladı" yazıyor.
Şekil 1. Kullanıcı, ekran görüntüsü algılama API'sini destekleyen bir uygulamanın ekran görüntüsünü aldığında sistem tarafından sağlanan ve ekranda görünen örnek bir kısa mesaj.

Android 14, ekran görüntüsü algılamada daha standart bir deneyim sunmak için 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 kaydetmesine olanak tanır. Bu geri çağırmalar, kullanıcı etkinlik görünürken ekran görüntüsü aldığında çağrılır ve kullanıcı bilgilendirilir.

Desteklenen kullanım durumları

Android 14'te sistem API'si, yalnızca kullanıcı belirli bir donanım düğmesi kombinasyonuna bastığında ekran görüntüsü 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 testleri sırasında 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 beyan edin:

<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:

  1. 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ün alındığı 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.
            }
        };
  2. Etkinliğin onStart() yönteminde ekran görüntüsü geri çağırmayı 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);
    }
  3. Etkinliğin onStop() yönteminde ekran görüntüsü geri çağırma işlevinin kaydını iptal edin:

    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 ekran işaretini ayarlayın.

Kotlin

activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)

Java

activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);