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

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

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

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

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

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

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

צילום סרטון

לצפייה אפליקציה לדוגמה של צילום מסך ללמוד איך משתמשים בממשק ה-API של Media Projection כדי לתעד במסך בזמן אמת ולהציג אותו ב-SurfaceView.

אפשר להשתמש ב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 מופעלים בזמן הקריאה לשיטה, האודיו לא מושפע. כדי שהשינוי במדיניות ייכנס לתוקף, צריך לסגור ולפתוח מחדש את הנגן או הטראק.

מדיניות = manifest +‏ 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 מערכת בלבד מערכת בלבד ללא תיעוד