تسجيل تشغيل الفيديو والصوت

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

كيفية التعامل مع رمز MediaProjection المميّز

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

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

لمعالجة فقدان رمز مميّز، سجِّل معاودة الاتصال على المثيل MediaProjection باستخدام الطريقة registerCallback، وأوقِف التسجيل عند استدعاء الطريقة onStop.

للحصول على مزيد من المعلومات، يمكنك الاطلاع على عرض الوسائط.

التقاط فيديو

يمكنك الاطّلاع على نموذج تطبيق ScreenCapture للتعرّف على طريقة استخدام واجهة برمجة التطبيقات Media Projection API لالتقاط صورة لشاشة الجهاز في الوقت الفعلي وعرضها على SurfaceView.

يمكنك استخدام DevicePolicyManager لمنع تسجيل الشاشة. بالنسبة إلى حسابات المؤسسات (Android for Work)، يمكن للمشرف إيقاف جمع بيانات المساعد لملف العمل باستخدام الطريقة setscreenCaptureDisabled.

يوضّح الدرس التطبيقي حول الترميز إدارة أجهزة Android بدون تطبيق كيفية حظر لقطات الشاشة.

التقاط تشغيل الصوت

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

يُرجى العِلم أنّ واجهة برمجة التطبيقات AudioPlaybackCapture لا تؤثر في وقت استجابة التطبيق الذي يتم تسجيل الصوت فيه.

إنشاء تطبيق التقاط

لأسباب تتعلق بالأمان والخصوصية، يفرض الالتقاط أثناء التشغيل بعض القيود. ليتمكّن التطبيق من تسجيل الصوت، يجب أن يستوفي المتطلبات التالية:

  • يجب أن يحصل التطبيق على إذن RECORD_AUDIO.
  • يجب أن يعرض التطبيق الطلب الذي يعرضه MediaProjectionManager.createScreenCaptureIntent()، ويجب أن يوافق المستخدم عليه.
  • يجب أن تكون تطبيقات الالتقاط وتشغيلها في الملف الشخصي نفسه للمستخدم.

لالتقاط صوت من تطبيق آخر، يجب أن ينشئ تطبيقك كائن AudioRecord ويضيف AudioPlaybackCaptureConfiguration إليه. اتّبِع الخطوات التالية:

  1. يمكنك الاتصال بالرقم AudioPlaybackCaptureConfiguration.Builder.build() لإنشاء AudioPlaybackCaptureConfiguration.
  2. عليك تمرير الإعدادات إلى AudioRecord من خلال استدعاء setAudioPlaybackCaptureConfig.

التحكم في التقاط الصوت

يمكن لتطبيقك التحكم في أنواع المحتوى الذي يمكنه تسجيله والأنواع الأخرى من التطبيقات التي يمكنها تسجيل عملية التشغيل بنفسه.

تقييد الالتقاط باستخدام المحتوى الصوتي

يمكن للتطبيق تحديد الصوت الذي يمكنه تسجيله باستخدام الطرق التالية:

  • مرِّر AUDIO_USAGE إلى AudioPlaybackCaptureConfiguration.addMatchingUsage() للسماح بالتقاط استخدام معيَّن. وعليك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد.
  • مرِّر AUDIO_USAGE إلى AudioPlaybackCaptureConfiguration.AdminUsage() لحظر التقاط هذا الاستخدام. وعليك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد.
  • مرِّر معرّف UID إلى AudioPlaybackCaptureConfiguration.addMatchingUid() لالتقاط التطبيقات فقط باستخدام معرّف فريد محدّد. عليك استدعاء الطريقة عدة مرات لتحديد أكثر من معرِّف فريد واحد.
  • أدخِل معرِّف UID إلى AudioPlaybackCaptureConfiguration.exclusionUid() لحظر التقاط هذا المعرّف الفريد. عليك استدعاء الطريقة عدة مرات لتحديد أكثر من معرِّف فريد واحد.

يُرجى العِلم أنّه لا يمكنك استخدام الطريقتَين addMatchingUsage() وexcludeUsage() معًا. يجب عليك اختيار أحدهما أو الآخر. وبالمثل، لا يمكنك استخدام addMatchingUid() وexcludeUid() في الوقت نفسه.

حظر التقاط الصور بواسطة التطبيقات الأخرى

يمكنك ضبط إعدادات أحد التطبيقات لمنع التطبيقات الأخرى من التقاط صوته. لا يمكن التقاط الصوت الصادر من أحد التطبيقات إلا إذا استوفى التطبيق المتطلبات التالية:

الاستخدام

ويجب على المشغّل الذي ينتج المحتوى الصوتي ضبط استخدامه على USAGE_MEDIA أو USAGE_GAME أو USAGE_UNKNOWN.

سياسة الالتقاط

يجب ضبط سياسة الالتقاط لدى المشغّل على AudioAttributes.ALLOW_CAPTURE_BY_ALL، ما يسمح للتطبيقات الأخرى بتسجيل تشغيل الفيديو. ويمكن إجراء ذلك بعدة طرق:

في حال استيفاء هذه المتطلّبات الأساسية، يمكن تسجيل أي صوت يصدره المشغِّل.

إيقاف التقاط النظام

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

ضبط السياسة في وقت التشغيل

يمكنك طلب AudioManager.setAllowedCapturePolicy() لتغيير سياسة الالتقاط أثناء تشغيل التطبيق. وفي حال تشغيل MediaPlayer أو AudioTrack عند استدعاء الطريقة، لن يتأثر الصوت. يجب إغلاق المشغِّل أو التتبع وإعادة فتحه حتى يدخل تغيير السياسة إلى حيز التنفيذ.

السياسة = البيان + مدير الصوت + سمات الصوت

ونظرًا لأنه يمكن تحديد سياسة الالتقاط في عدة أماكن، فمن المهم فهم كيفية تحديد السياسة الفعالة. يتم دائمًا تطبيق سياسة الالتقاط الأكثر تقييدًا. على سبيل المثال، لن يسمح التطبيق الذي يتضمّن بيانه setAllowedCapturePolicy="false" للتطبيقات غير التابعة للنظام بالتقاط الصوت مطلقًا، حتى إذا تم ضبط AudioManager#setAllowedCapturePolicy على ALLOW_CAPTURE_BY_ALL. وبالمثل، إذا تم ضبط AudioManager#setAllowedCapturePolicy على ALLOW_CAPTURE_BY_ALL وضبط البيان على setAllowedCapturePolicy="true"، في حين تم إنشاء مشغّل الوسائط AudioAttributes باستخدام AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)، لن تتمكّن تطبيقات غير تابعة للنظام من التقاط هذه مشغّلات الوسائط.

يلخّص الجدول أدناه تأثير سمة البيان والسياسة الفعّالة:

السماح بالتقاط الصوت ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true أي تطبيق النظام فقط عدم التقاط الصور
خطأ النظام فقط النظام فقط عدم التقاط الصور