אפליקציה יכולה להקליט את הסרטון או את האודיו שמושמעים מאפליקציה אחרת. כאלה
חייבים לטפל
אסימון 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
אליה. בצע את השלבים הבאים:
- חיוג אל
AudioPlaybackCaptureConfiguration.Builder.build()
כדי לבנותAudioPlaybackCaptureConfiguration
- צריך להעביר את ההגדרות האישיות אל
AudioRecord
setAudioPlaybackCaptureConfig
.
שליטה בהקלטת אודיו
האפליקציה שלך יכולה לשלוט בסוגי התוכן שהיא יכולה להקליט, ובאילו סוגי תוכן נוספים שונים יכולים להקליט השמעה משלהם.
הגבלת תיעוד באמצעות תוכן אודיו
אפליקציה יכולה להגביל את האודיו שהיא יכולה להקליט באמצעות אמצעי תשלום:
- צריך להעביר
AUDIO_USAGE
אל AudioPlaybackCaptureConfiguration.addMatchingUsage() כדי לאפשר תיעוד של שימוש מסוים. מפעילים את השיטה מספר פעמים כדי לציין יותר משימוש אחד. - מעבירים ערך של
AUDIO_USAGE
אל AudioPlaybackCaptureConfiguration.ExcludeUsage() אל ואסור לתעד את השימוש הזה. מפעילים את השיטה מספר פעמים כדי לציין יותר משימוש אחד. - העברת UID אל AudioPlaybackCaptureConfiguration.addMatchingUid() כדי לתעד רק אפליקציות עם UID ספציפי. קוראים לשיטה כמה פעמים כדי לציין יותר מ-UID אחד.
- מעבירים UID אל AudioPlaybackCaptureConfiguration.exclusionUid() כדי למנוע את הקלטת ה-UID הזה. קוראים לשיטה כמה פעמים כדי לציין יותר מ-UID אחד.
לתשומת ליבך: לא ניתן להשתמש בשיטות 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 פועלים
כשקוראים ל-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 | מערכת בלבד | מערכת בלבד | אין צילום |