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

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

מדיניות = מניפסט + Audio Manager + מאפייני אודיו

מאחר שניתן לציין את מדיניות הצילום במספר מקומות, חשוב כדי להבין איך נקבעת המדיניות בפועל. מדיניות הצילום המגבילה ביותר היא תמיד. לדוגמה, אפליקציה המניפסט כולל setAllowedCapturePolicy="false" לעולם לא יתיר קבצים שאינם מערכת אפליקציות להקליט את האודיו שלו, גם אם AudioManager#setAllowedCapturePolicy מוגדר אל ALLOW_CAPTURE_BY_ALL. באופן דומה, אם הערך AudioManager#setAllowedCapturePolicy מוגדר ל-ALLOW_CAPTURE_BY_ALL המניפסט מגדיר את setAllowedCapturePolicy="true", אבל AudioAttributes פותחו עם AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), לאחר מכן אפליקציות שאינן של המערכת לא יוכלו לשלוט בנגן המדיה הזה.

הטבלה הבאה מסכמת את ההשפעה של מאפיין המניפסט המדיניות שנמצאת בתוקף:

אפשר להפעיל אודיו ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true כל אפליקציה מערכת בלבד אין צילום
false מערכת בלבד מערכת בלבד אין צילום