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