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

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

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

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

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

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

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

التقاط فيديو

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

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

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

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

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

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

إنشاء تطبيق لتسجيل الشاشة

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

  • يجب أن يحصل التطبيق على إذن 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)، لن تتمكّن التطبيقات غير المضمّنة في النظام من التقاط مشغّل الوسائط هذا.

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

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
صحيح أي تطبيق النظام فقط لا يتم تسجيل أي بيانات
خطأ النظام فقط النظام فقط لا يتم تسجيل أي بيانات