يمكن للتطبيق تسجيل الفيديو أو الصوت الذي يتم تشغيله من تطبيق آخر. مثل
التطبيقات يجب أن تتعامل مع
الرمز المميّز لـ MediaProjection
بشكل صحيح. تشرح هذه الصفحة كيفية إجراء ذلك. وتشرح أيضًا كيف يمكن لمشرف الجهاز إيقاف
والقدرة على تسجيل أي لقطات شاشة، والطريقة التي يمكن بها لتطبيق صوتي منع
التطبيقات الأخرى من تسجيل المحتوى الذي يتم تشغيله.
كيفية التعامل مع رمز MediaProjection
واجهة برمجة تطبيقات MediaProjection
يسمح هذا الإذن للتطبيقات بالحصول على رمز مميّز من "MediaProjection
" يتيح لها الوصول إليها لمرة واحدة.
لتسجيل محتوى الشاشة أو الصوت. يطلب نظام التشغيل Android من المستخدم منح إذنًا قبل منح رمز المرور لتطبيقك.
يعرض نظام التشغيل الرموز المميّزة النشطة لبروتوكول MediaProjection
في واجهة مستخدم "الإعدادات السريعة" ويسمح للمستخدمين بسحب إذن الوصول إلى الرمز المميّز في أي وقت. وعند حدوث ذلك،
توقُّف استلام الشاشات أو البث الصوتي المرتبط بالجلسة
بث الوسائط. يجب أن يستجيب تطبيقك بشكل مناسب، وإلا سيواصل تسجيل محتوى صوتي صامت أو بث فيديو أسود.
للتعامل مع فقدان الرمز المميّز، سجِّل طلب استدعاء في مثيل MediaProjection
باستخدام الأسلوب
registerCallback
وأوقِف التسجيل عند استدعاء الأسلوب
onStop
.
لمزيد من المعلومات، يُرجى الاطّلاع على عرض الوسائط.
التقاط فيديو
اطّلِع على نموذج تطبيق ScreenCapture لمعرفة كيفية استخدام Media Projection API لالتقاط شاشة جهاز في الوقت الفعلي وعرضها على SurfaceView.
يمكنك استخدام الرمز DevicePolicyManager
لمنع تسجيل الشاشة. بالنسبة إلى حسابات المؤسسات (Android for Work)،
يمكن للمشرف إيقاف جمع بيانات "مساعد Google" لملف العمل.
باستخدام
setscreenCaptureDisabled
.
يوضّح ورشة التطوير إدارة أجهزة Android بدون تطبيق كيفية حظر لقطات الشاشة.
التقاط تشغيل الصوت
تم تقديم واجهة AudioPlaybackCapture API في نظام التشغيل Android 10. واجهة برمجة التطبيقات هذه لمنح التطبيقات إمكانية نسخ الصوت الذي يتم تشغيله بواسطة تطبيقات أخرى. هذا النمط هو التناظرية لتصوير الشاشة، ولكن للصوت. إن حالة الاستخدام الأساسية هي لتطبيقات البث التي تريد تسجيل الصوت الذي تشغِّله الألعاب
يُرجى العلم أنّ واجهة برمجة التطبيقات AudioPlaybackCapture API لا تؤثّر في وقت استجابة التطبيق الذي يتم تسجيل صوته.
إنشاء تطبيق لتسجيل الشاشة
لأسباب تتعلق بالأمان والخصوصية، يفرض الالتقاط أثناء التشغيل بعض القيود. ليتمكّن التطبيق من تسجيل الصوت، يجب أن يستوفي المتطلبات التالية:
- يجب أن يتضمّن التطبيق
RECORD_AUDIO
إذن. - يجب أن يعرض التطبيق الطلب الذي يعرضه
MediaProjectionManager.createScreenCaptureIntent()
، وعلى المستخدم الموافقة عليه. - يجب أن يكون تطبيقا الالتقاط والتشغيل في الملف الشخصي نفسه للمستخدم.
لالتقاط صوت من تطبيق آخر، يجب أن يُنشئ التطبيق
كائن AudioRecord
وإضافة
AudioPlaybackCaptureConfiguration
إليه. اتبع هذه الخطوات:
- الاتصال بالرقم
AudioPlaybackCaptureConfiguration.Builder.build()
لإنشاءAudioPlaybackCaptureConfiguration
- تمرير الإعدادات إلى
AudioRecord
من خلال طلبsetAudioPlaybackCaptureConfig
التحكّم في تسجيل الصوت
يمكن لتطبيقك التحكم في أنواع المحتوى الذي يمكنه تسجيله وأنواع المحتوى من التطبيقات تسجيل التشغيل الخاص بها.
تقييد الالتقاط باستخدام المحتوى الصوتي
يمكن للتطبيق حصر المحتوى الصوتي الذي يمكنه تسجيله باستخدام الخطوات التالية:
- نقْل
AUDIO_USAGE
إلى AudioPlaybackCaptureConfiguration.addMatchingUsage() للسماح بتسجيل استخدام محدّد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد. - مرِّر
AUDIO_USAGE
إلى audioPlaybackCaptureConfiguration.exclusionUsage() إلى. أن نحظر التقاط هذا الاستخدام. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من استخدام واحد. - تمرير معرّف فريد إلى AudioPlaybackCaptureConfiguration.addMatchingUid() لالتقاط التطبيقات التي لها مُعرّف فريد محدّد فقط. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف مستخدم واحد.
- أدخِل معرِّف UID إلى AudioPlaybackCaptureConfiguration.exclusionUid() لحظر التقاط هذا المعرّف الفريد. يمكنك استدعاء الطريقة عدة مرات لتحديد أكثر من معرّف مستخدم واحد.
يُرجى العلم أنّه لا يمكنك استخدام الطريقتَين 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
عند استدعاء الأسلوب، لن يتأثّر الصوت. يجب إغلاق المشغّل أو المقطع الصوتي وإعادة فتحهما كي يتم تطبيق تغيير السياسة.
السياسة = البيان + مدير الصوت + سمات الصوت
بما أنّه يمكن تحديد سياسة التسجيل في عدة مواضع، من المهم معرفة كيفية تحديد السياسة السارية.
يتم دائمًا تطبيق سياسة الالتقاط الأكثر تقييدًا. على سبيل المثال، لن يسمح التطبيق الذي يحتوي ملف بيانه على 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 |
---|---|---|---|
صحيح | أي تطبيق | النظام فقط | لا يتم تسجيل أي بيانات |
خطأ | النظام فقط | النظام فقط | لا يتم تسجيل أي بيانات |