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

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

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

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

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

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

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

التقاط فيديو

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

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

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

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

تم تقديم واجهة برمجة التطبيقات AudioPlaybackCapture في 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
صحيح أي تطبيق النظام فقط بدون تسجيل
خطأ النظام فقط النظام فقط بدون تسجيل