رصد الحالات التي يأخذ فيها المستخدمون لقطات شاشة للجهاز

تظهر رسالة "رصد تطبيق Pay لقطة الشاشة هذه"
الشكل 1: مثال على رسالة Toast التي يوفّرها النظام وتظهر عندما يأخذ المستخدم لقطة شاشة لتطبيق متوافق مع واجهة برمجة التطبيقات لرصد لقطات الشاشة.

لتوفير تجربة أكثر اتساقًا لرصد لقطات الشاشة، يقدّم Android 14 واجهة برمجة تطبيقات لرصد لقطات الشاشة تحافظ على الخصوصية. تتيح واجهة برمجة التطبيقات هذه للتطبيقات تسجيل عمليات ردّ الاتصال لكل نشاط على حدة. يتم استدعاء عمليات الاستدعاء هذه، ويتم إشعار المستخدم، عندما يأخذ المستخدم لقطة شاشة أثناء ظهور هذا النشاط.

حالات الاستخدام المتوافقة

في الإصدار 14 من نظام التشغيل Android، لا ترصد واجهة برمجة التطبيقات للنظام لقطة شاشة إلا إذا ضغط المستخدم على مجموعة معيّنة من أزرار الجهاز. لا ترصد واجهة برمجة التطبيقات لقطات الشاشة التي يتم أخذها عند تنفيذ أوامر اختبارية متعلقة بلقطات الشاشة، بما في ذلك ADB، أو ضمن اختبارات قياس الأداء التي تلتقط محتوى الشاشة الحالي للجهاز.

خطوات التنفيذ

لإضافة ميزة رصد لقطات الشاشة، يجب الإفصاح عن إذن DETECT_SCREEN_CAPTURE الجديد الذي يتم منحه وقت التثبيت:

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

بعد ذلك، أكمِل هذه الخطوات لكل نشاط في تطبيقك قد يلتقط فيه المستخدمون لقطات شاشة:

  1. يمكنك تنفيذ دالة رد اتصال من خلال إلغاء الدالة onScreenCapture(). في دالة الاستدعاء هذه، يمكن لتطبيقك اتخاذ إجراء، مثل تحذير مستخدم آخر من أنّ شخصًا ما التقط لقطة شاشة لمحادثة مراسلة.

    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. في طريقة onStart() الخاصة بالنشاط، سجِّل دالة الاستدعاء الخاصة بلقطة الشاشة.

    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. في إجراء onStop() الخاص بالنشاط، عليك إلغاء تسجيل دالة الاستدعاء الخاصة بلقطة الشاشة:

    Kotlin

    override fun onStop() {
        super.onStop()
        unregisterScreenCaptureCallback(screenCaptureCallback)
    }

    Java

    @Override
    protected void onStop() {
        super.onStop();
        unregisterScreenCaptureCallback(screenCaptureCallback);
    }

التحكّم في إمكانية التقاط لقطات الشاشة

إذا كنت لا تريد أن يظهر محتوى نشاط التطبيق في لقطات الشاشة أو على شاشات غير آمنة، اضبط علامة العرض FLAG_SECURE.

Kotlin

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

Java

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