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

تظهر الرسالة "رصد تطبيق Pay لقطة الشاشة هذه".
الشكل 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.

Kotlin

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

Java

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