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 sistem tarafından sağlanan kısa mesaj mesajı örneği.

Android 14, ekran görüntülerini algılama konusunda daha standart bir deneyim oluşturmak için 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. Kullanıcı, etkinlik görünür durumdayken ekran görüntüsü aldığında bu geri çağırmalar çağrılır ve kullanıcı bilgilendirilir.

Desteklenen kullanım alanları

Android 14'te sistem API'si, ekran görüntüsünü yalnızca kullanıcının donanım düğmesine basmaları için belirli bir kombinasyon gerçekleştirirse algılar. API, ADB dahil ekran görüntüleriyle ilgili test komutları çalıştırılırken veya cihazın geçerli ekran içeriğini yakalayan araç 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 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 bu adımları tamamlayın:

  1. onScreenCapture() işlevini geçersiz kılarak bir geri çağırma uygulayın. Bu geri çağırma işleminde uygulamanız harekete geçebilir. Örneğin, bir başka kullanıcıyı mesajlaşma 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.
            }
        };
    
  2. Etkinliğin onStart() yönteminde ekran görüntüsü geri çağırma işlemini 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 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ü yakalama özelliğ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);