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

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

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

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

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

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

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

التقاط فيديو

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

يمكنك استخدام الرمز DevicePolicyManager لمنع تسجيل الشاشة. بالنسبة إلى حسابات المؤسسات (برنامج "Android للعمل")، يمكن للمدير إيقاف جمع بيانات المساعد للملف الشخصي للعمل باستخدام الأسلوب setScreenCaptureDisabled.

يوضّح ملف codelab إدارة أجهزة 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 غير المخصّصة للنظام بتسجيل الصوت، حتى إذا تم ضبط 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
صحيح أي تطبيق النظام فقط لا يتم تسجيل أي بيانات
خطأ النظام فقط النظام فقط لا يتم تسجيل أي بيانات