يمكن لأحد التطبيقات تسجيل الفيديو أو الصوت الذي يتم تشغيله من تطبيق آخر. يجب أن تتعامل هذه التطبيقات مع الرمز المميّز 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() لمنع تسجيل هذا المعرّف الفريد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف UID واحد.
يُرجى العِلم أنّه لا يمكنك استخدام الطريقتَين 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 |
|---|---|---|---|
| صحيح | أي تطبيق | النظام فقط | بدون تسجيل |
| خطأ | النظام فقط | النظام فقط | بدون تسجيل |