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

Mesajda "Pay uygulaması bu ekran görüntüsünü algıladı" yazıyor
Şekil 1. Sistem tarafından sağlanan kısa mesaj mesajı örneği Kullanıcı, özelliği destekleyen bir uygulamanın ekran görüntüsünü aldığında gösterilen ekran görüntüsü algılama API'si.

Ekran görüntülerinin algılanmasında daha standartlaştırılmış bir deneyim oluşturmak için Android 14'te, gizliliği korumaya yönelik ekran görüntüsü algılama özelliği kullanıma sunuluyor API'ye gidin. Bu API, uygulamaların geri çağırmaları etkinlik bazında kaydetmesine olanak tanır. Bu Geri çağırmalar çağrılır ve kullanıcı bir arama yaptığında kullanıcı bilgilendirilir. ekran görüntüsü almalısınız.

Desteklenen kullanım alanları

Android 14'te sistem API'si, yalnızca kullanıcı şu işlemleri gerçekleştirirse ekran görüntüsü algılar: ya da donanım düğmelerine basit bir şekilde bastırmayı. API, verilerinizi ekran görüntüleri ile ilgili test komutlarını çalıştırırken alınan ekran görüntüleri, dahil olmak üzere ADB veya cihazın Mevcut ekran içeriklerini takip edin.

Uygulama adımları

Ekran görüntüsü algılama eklemek için yeni DETECT_SCREEN_CAPTURE beyan edin yükleme zamanı izni:

<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />

Ardından, uygulamanızda kullanıcıların ekran görüntüsü al:

  1. onScreenCapture() işlevini geçersiz kılarak bir geri çağırma uygulayın. Burada geri çağırması durumunda uygulamanız işlem gerçekleştirebilir. Örneğin, başka bir kullanıcıyı Birisi bir mesajlaşma görüşmesinin ekran görüntüsünü aldı.

    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ğı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);
    }
    
  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ü yakalama yeteneğini kontrol edin

Uygulama etkinliklerinin içeriğinin ekran görüntülerinde görünmesini istemiyorsanız veya güvenli olmayan ekranlarda 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);