תיעוד הפעלה של וידאו ואודיו

אפליקציה יכולה להקליט את הווידאו או האודיו שמופעלים מאפליקציה אחרת. אפליקציות כאלה צריכות לטפל בטוקן MediaProjection בצורה נכונה. בדף הזה אנחנו מסבירים איך לעשות את זה. הוא גם מראה איך מנהל מכשיר יכול להשבית את היכולת להקליט צילומי מסך, ואיך אפליקציית אודיו יכולה למנוע מאפליקציות אחרות להקליט את התוכן שהיא מפעילה.

איך מטפלים באסימון MediaProjection

‫MediaProjection API מאפשר לאפליקציות לקבל אסימון MediaProjection שנותן להן גישה חד-פעמית לצילום תוכן המסך או האודיו. מערכת ההפעלה Android מבקשת מהמשתמש אישור לפני שהיא מעניקה את האסימון לאפליקציה.

מערכת ההפעלה מציגה את הטוקנים הפעילים של MediaProjection בממשק המשתמש של ההגדרות המהירות, ומאפשרת למשתמשים לבטל את הגישה לטוקן בכל שלב. במצב כזה, המסכים הווירטואליים או שידורי האודיו שמשויכים לסשן מפסיקים לקבל שידורי מדיה. האפליקציה צריכה להגיב בהתאם, אחרת היא תמשיך להקליט אודיו שקט או שידור וידאו שחור.

כדי לטפל במצב שבו האסימון אבד, צריך לרשום קריאה חוזרת (callback) במכונה של MediaProjection באמצעות ה-method‏ registerCallback, ולהפסיק את ההקלטה כשמתבצעת קריאה ל-method‏ onStop.

מידע נוסף זמין במאמר בנושא הקרנת מדיה.

צלם סרטון

אתם יכולים להשתמש ב-DevicePolicyManager כדי למנוע הקלטת מסך. בחשבונות ארגוניים (Android for Work), האדמין יכול להשבית את איסוף הנתונים של Assistant בפרופיל העבודה באמצעות השיטה setScreenCaptureDisabled.

ב-Codelab ניהול מכשירי Android בלי אפליקציה מוסבר איך לאסור צילומי מסך.

הקלטת אודיו

AudioPlaybackCapture API הושק ב-Android 10. ה-API הזה מאפשר לאפליקציות להעתיק את האודיו שמופעל על ידי אפליקציות אחרות. התכונה הזו מקבילה לצילום מסך, אבל לאודיו. תרחיש השימוש העיקרי הוא לאפליקציות סטרימינג שרוצות להקליט את האודיו שמושמע במשחקים.

חשוב לדעת: AudioPlaybackCapture API לא משפיע על זמן האחזור של האפליקציה שהאודיו שלה מתועד.

פיתוח אפליקציה לצילום תמונות

מטעמי אבטחה ופרטיות, יש כמה מגבלות על הקלטת שידור חוזר. כדי שאפליקציה תוכל להקליט אודיו, היא צריכה לעמוד בדרישות הבאות:

  • לאפליקציה צריכה להיות ההרשאה 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
true כל אפליקציה המערכת בלבד בלי תיעוד
false המערכת בלבד המערכת בלבד בלי תיעוד