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

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

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

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

في Android 14، لا ترصد واجهة برمجة التطبيقات للنظام لقطة الشاشة إلا إذا ضغط المستخدم على مجموعة معيّنة من أزرار الجهاز. ولا ترصد واجهة برمجة التطبيقات لقطات الشاشة التي يتم أخذها عند تنفيذ أوامر الاختبار المتعلقة بلقطات الشاشة، بما في ذلك 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 display flag.

Kotlin

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

Java

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