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

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

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

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

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

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

لإضافة ميزة رصد لقطات الشاشة، عليك الإفصاح عن إذن DETECT_SCREEN_CAPTURE install-time الجديد:

<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);