لتوفير تجربة أكثر اتساقًا لرصد لقطات الشاشة، يقدّم Android 14 واجهة برمجة تطبيقات لرصد لقطات الشاشة تحافظ على الخصوصية. تتيح واجهة برمجة التطبيقات هذه للتطبيقات تسجيل عمليات ردّ الاتصال لكل نشاط على حدة. يتم استدعاء عمليات الاستدعاء هذه، ويتم إشعار المستخدم، عندما يأخذ المستخدم لقطة شاشة أثناء ظهور هذا النشاط.
حالات الاستخدام المتوافقة
في الإصدار 14 من نظام التشغيل Android، لا ترصد واجهة برمجة التطبيقات للنظام لقطة شاشة إلا إذا ضغط المستخدم على مجموعة معيّنة من أزرار الجهاز. لا ترصد واجهة برمجة التطبيقات لقطات الشاشة التي يتم أخذها عند تنفيذ أوامر اختبارية متعلقة بلقطات الشاشة، بما في ذلك ADB، أو ضمن اختبارات قياس الأداء التي تلتقط محتوى الشاشة الحالي للجهاز.
خطوات التنفيذ
لإضافة ميزة رصد لقطات الشاشة، يجب الإفصاح عن إذن DETECT_SCREEN_CAPTURE الجديد الذي يتم منحه وقت التثبيت:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
بعد ذلك، أكمِل هذه الخطوات لكل نشاط في تطبيقك قد يلتقط فيه المستخدمون لقطات شاشة:
يمكنك تنفيذ دالة رد اتصال من خلال إلغاء الدالة
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. } };
في طريقة
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); }
في إجراء
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);