يمكن للتطبيق تسجيل الفيديو أو الصوت الذي يتم تشغيله من تطبيق آخر. وعلى التطبيقات التي تفعل ذلك التعامل مع رمز التمويه
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
. اتبع هذه الخطوات:
- يُرجى الاتصال بالرقم
AudioPlaybackCaptureConfiguration.Builder.build()
لإنشاء حساب علىAudioPlaybackCaptureConfiguration
. - نقْل الإعدادات إلى
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: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
غير المخصّصة للنظام بتسجيل الصوت، حتى إذا تم ضبط 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 |
---|---|---|---|
صحيح | أي تطبيق | النظام فقط | لا يتم تسجيل أي بيانات |
خطأ | النظام فقط | النظام فقط | لا يتم تسجيل أي بيانات |