כדי ליצור חוויה סטנדרטית יותר לזיהוי צילומי מסך, ב-Android 14 כוללים זיהוי של צילומי מסך תוך שמירה על הפרטיות API. ה-API הזה מאפשר לאפליקציות לרשום קריאות חוזרות (callback) לפי פעילות. האלה מופעלות קריאה חוזרת (callback), והמשתמש מקבל התראה כשהמשתמש מבצע בצילום המסך כשהפעילות הזו גלויה.
תרחישים נתמכים לדוגמה
ב-Android 14, ה-API של המערכת מזהה צילום מסך רק אם המשתמש מבצע שילוב ספציפי של לחיצות על לחצני החומרה. ה-API לא מזהה צילומי מסך שמצלמים כשמריצים פקודות בדיקה שקשורות לצילומי מסך, כולל ADB, או בבדיקות אינסטרומנטציה ששמתעדות את תוכן המסך הנוכחי.
שלבי ההטמעה
כדי להוסיף זיהוי של צילומי מסך, צריך להצהיר על DETECT_SCREEN_CAPTURE
החדש
הרשאה בזמן ההתקנה:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
לאחר מכן, צריך להשלים את השלבים האלה בכל פעילות באפליקציה שבה משתמשים עשויים צילומי מסך:
כדי להטמיע קריאה חוזרת (callback), צריך לבטל את הפונקציה
onScreenCapture()
. כאן קריאה חוזרת, האפליקציה שלך יכולה לנקוט פעולה, כמו להזהיר משתמש אחר מישהו צילם צילום מסך של שיחת הודעות.Kotlin
val screenCaptureCallback = Activity.ScreenCaptureCallback { // Add logic to take action in your app. }
Java
final Activity.ScreenCaptureCallback screenCaptureCallback = new Activity.ScreenCaptureCallback() { @Override public void onScreenCaptured() { // Add logic to take action in your app. } };
ב-method
onStart()
של הפעילות, רושמים את הקריאה החוזרת של צילום המסך.Kotlin
override fun onStart() { super.onStart() // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(mainExecutor, screenCaptureCallback) }
Java
@Override protected void onStart() { super.onStart(); // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(executor, screenCaptureCallback); }
ב-method
onStop()
של הפעילות, מבטלים את הרישום של הקריאה החוזרת של צילום המסך:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
שליטה באפשרות לצלם צילומי מסך
אם אתם לא רוצים שתוכן הפעילות של האפליקציה יופיע בצילומי מסך, או
במסכים לא מאובטחים, מגדירים את דגל התצוגה FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);