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

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

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

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

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

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

لمزيد من المعلومات، يُرجى الاطّلاع على عرض الوسائط.

التقاط فيديو

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

يمكنك استخدام DevicePolicyManager لمنع تسجيل الشاشة. بالنسبة إلى حسابات المؤسسات (Android for Work)، يمكن للمشرف إيقاف جمع بيانات "مساعد Google" لملف العمل باستخدام طريقة 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.excludeUsage() لمنع تسجيل هذا الاستخدام. استدعِ الطريقة عدة مرات لتحديد أكثر من استخدام واحد.
  • مرِّر معرّفًا فريدًا إلى AudioPlaybackCaptureConfiguration.addMatchingUid()‎ لتسجيل الصوت من التطبيقات التي تحمل معرّفًا فريدًا معيّنًا فقط. استدعِ الطريقة عدة مرات لتحديد أكثر من معرّف فريد واحد.
  • مرِّر معرّفًا فريدًا إلى AudioPlaybackCaptureConfiguration.excludeUid()‎ لمنع تسجيل هذا المعرّف الفريد. استدعِ الطريقة عدة مرات لتحديد أكثر من معرّف فريد واحد.

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

السياسة = ملف البيان + AudioManager + AudioAttributes

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

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

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true أي تطبيق النظام فقط لا يمكن التقاط الشاشة
خطأ النظام فقط النظام فقط لا يمكن التقاط الشاشة