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

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

لتوفير تجربة أكثر اتساقًا لرصد لقطات الشاشة، يقدّم نظام التشغيل 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.

Kotlin

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

Java

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