Kullanıcılar cihaz ekran görüntüsü aldığında bunu algıla

"Pay uygulaması bu ekran görüntüsünü algıladı" mesajı gösteriliyor
Ş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 gösterilen, sistem tarafından sağlanan durum mesajı mesajının bir örneği.

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 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, yalnızca kullanıcı donanım düğmesine belirli bir sayıda 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ıldığında veya cihazın mevcut ekran içeriğini yakalayan enstrümantasyon testleri sırasında çekilen 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:

  1. 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.
            }
        };
  2. 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);
    }
  3. 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ü 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);