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

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

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

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

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

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

لمزيد من المعلومات، يُرجى الاطّلاع على بث محتوى الشاشة.

التقاط فيديو

يمكنك استخدام 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.

التحكّم في تسجيل الصوت

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

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

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

يُرجى العِلم أنّه لا يمكنك استخدام الطريقتَين 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
صحيح أي تطبيق النظام فقط no capture
خطأ النظام فقط النظام فقط لا يمكن التقاط الشاشة