يمكن لأي تطبيق تسجيل الفيديو أو الصوت الذي يتم تشغيله من تطبيق آخر. يجب أن تتعامل هذه التطبيقات مع الرمز المميّز MediaProjection بشكل صحيح. توضّح هذه الصفحة كيفية تنفيذ ذلك. ويوضّح أيضًا كيف يمكن لمشرف الجهاز إيقاف إمكانية تسجيل أي لقطات شاشة، وكيف يمكن لتطبيق صوتي منع التطبيقات الأخرى من تسجيل المحتوى الذي يشغّله.
كيفية التعامل مع رمز MediaProjection المميّز
تتيح واجهة برمجة التطبيقات MediaProjection للتطبيقات الحصول على رمز مميّز لـ MediaProjection يمنحها إذن الوصول لمرة واحدة لتسجيل محتوى الشاشة أو الصوت. يطلب نظام التشغيل Android من المستخدم الحصول على
إذنه قبل منح الرمز المميّز لتطبيقك.
يعرض نظام التشغيل رموز MediaProjection المميّزة النشطة في واجهة مستخدم "الإعدادات السريعة"،
ويسمح للمستخدمين بسحب إذن الوصول إلى رمز مميّز في أي وقت. عند حدوث ذلك، تتوقف الشاشات الافتراضية أو البث الصوتي المرتبط بالجلسة عن تلقّي بث الوسائط. يجب أن يستجيب تطبيقك بشكل مناسب، وإلا سيستمر
في تسجيل صوت صامت أو بث فيديو أسود.
للتعامل مع فقدان الرمز المميّز، يمكنك تسجيل دالة رد اتصال في مثيل MediaProjection باستخدام طريقة registerCallback، وإيقاف التسجيل عند استدعاء طريقة onStop.
لمزيد من المعلومات، يُرجى الاطّلاع على عرض الوسائط.
التقاط فيديو
يمكنك استخدام DevicePolicyManager
لمنع تسجيل الشاشة. بالنسبة إلى حسابات المؤسسات (Android for Work)، يمكن للمشرف إيقاف جمع بيانات المساعد لملف العمل باستخدام طريقة setScreenCaptureDisabled.
يوضّح الدرس التطبيقي حول الترميز إدارة أجهزة Android بدون تطبيق كيفية حظر لقطات الشاشة.
تسجيل تشغيل الصوت
تم تقديم واجهة برمجة التطبيقات AudioPlaybackCapture في الإصدار 10 من نظام التشغيل Android. تمنح واجهة برمجة التطبيقات هذه التطبيقات إمكانية نسخ الصوت الذي تشغّله التطبيقات الأخرى. هذه الميزة مماثلة لميزة التقاط لقطة الشاشة، ولكنها مخصصة للصوت. حالة الاستخدام الأساسية هي تطبيقات البث التي تريد تسجيل الصوت الذي يتم تشغيله في الألعاب.
يُرجى العِلم أنّ واجهة AudioPlaybackCapture API لا تؤثر في وقت استجابة التطبيق الذي يتم تسجيل الصوت منه.
إنشاء تطبيق التقاط
لأسباب تتعلّق بالأمان والخصوصية، يفرض تسجيل التشغيل بعض القيود. ليتمكّن التطبيق من تسجيل الصوت، يجب أن يستوفي المتطلبات التالية:
- يجب أن يحصل التطبيق على إذن
RECORD_AUDIO. - يجب أن يعرض التطبيق الطلب الذي يظهر من خلال
MediaProjectionManager.createScreenCaptureIntent()، ويجب أن يوافق عليه المستخدم. - يجب أن يكون تطبيق التسجيل وتطبيق التشغيل في ملف المستخدم الشخصي نفسه.
لتسجيل الصوت من تطبيق آخر، يجب أن ينشئ تطبيقك عنصر
AudioRecord
ويضيف إليه
AudioPlaybackCaptureConfiguration. اتّبِع الخطوات التالية:
- اتصل بالرقم
AudioPlaybackCaptureConfiguration.Builder.build()لإنشاءAudioPlaybackCaptureConfiguration. - مرِّر الإعدادات إلى
AudioRecordمن خلال استدعاءsetAudioPlaybackCaptureConfig.
التحكّم في التقاط الصوت
يمكن لتطبيقك التحكّم في أنواع المحتوى التي يمكنه تسجيلها، وأنواع التطبيقات الأخرى التي يمكنها تسجيل المحتوى الذي يشغّله.
تقييد التسجيل حسب المحتوى الصوتي
يمكن لأي تطبيق تحديد الصوت الذي يمكنه تسجيله باستخدام هذه الطرق:
- مرِّر
AUDIO_USAGEإلى AudioPlaybackCaptureConfiguration.Builder.addMatchingUsage() للسماح بتسجيل استخدام محدّد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد. - مرِّر
AUDIO_USAGEإلى AudioPlaybackCaptureConfiguration.excludeUsage() لمنع تسجيل هذا الاستخدام. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد. - مرِّر معرّفًا فريدًا إلى AudioPlaybackCaptureConfiguration.addMatchingUid() لتسجيل التطبيقات التي لها معرّف فريد محدّد فقط. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف UID واحد.
- مرِّر معرّفًا فريدًا إلى AudioPlaybackCaptureConfiguration.excludeUid() لمنع تسجيل هذا المعرّف الفريد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف مستخدم واحد.
يُرجى العِلم أنّه لا يمكنك استخدام الطريقتَين addMatchingUsage() وexcludeUsage()
معًا. وعليك اختيار أحدهما. وبالمثل، لا يمكنك استخدام addMatchingUid() وexcludeUid()
في الوقت نفسه.
تقييد التسجيل من قِبل التطبيقات الأخرى
يمكنك ضبط تطبيق لمنع التطبيقات الأخرى من تسجيل الصوت فيه. لا يمكن تسجيل الصوت الصادر من تطبيق إلا إذا كان التطبيق يستوفي المتطلبات التالية:
الاستخدام
يجب أن يضبط المشغّل الذي ينتج الصوت استخدامه
على USAGE_MEDIA
أو USAGE_GAME
أو USAGE_UNKNOWN.
سياسة الالتقاط
يجب أن تكون سياسة التسجيل في المشغّل
AudioAttributes.ALLOW_CAPTURE_BY_ALL،
وهي تسمح للتطبيقات الأخرى بتسجيل التشغيل. ويمكن إجراء ذلك بعدة طرق:
- لتفعيل ميزة التسجيل على جميع المشغّلات، أدرِج
android:allowAudioPlaybackCapture="true"في ملفmanifest.xmlالخاص بالتطبيق. - يمكنك أيضًا تفعيل ميزة التسجيل لجميع اللاعبين من خلال استدعاء
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL). - يمكنك ضبط السياسة على مشغّل فردي عند إنشائه باستخدام
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL). (إذا كنت تستخدمAAudio، يمكنك الاتصال بالرقمAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_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 |
|---|---|---|---|
| صحيح | أي تطبيق | النظام فقط | بدون التقاط |
| خطأ | النظام فقط | النظام فقط | بدون التقاط |