זיהוי מקרים שבהם משתמשים מצלמים צילומי מסך של המכשיר

הודעה שכתוב בה "אפליקציית Pay זיהתה את צילום המסך הזה"
תרשים 1. דוגמה להודעה קצרה שמוצגת על ידי המערכת כשמשתמש מצלם צילום מסך של אפליקציה שתומכת ב-API לזיהוי צילומי מסך.

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

תרחישי שימוש נתמכים

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

שלבי היישום

כדי להוסיף זיהוי של צילומי מסך, צריך להצהיר על ההרשאה החדשה DETECT_SCREEN_CAPTURE בזמן ההתקנה:

<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />

לאחר מכן, מבצעים את השלבים הבאים בכל פעילות באפליקציה שבה המשתמשים יכולים לצלם את המסך:

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

    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.
            }
        };
  2. ב-method‏ onStart() של הפעילות, רושמים את הקריאה החוזרת (callback) של צילום המסך.

    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);
    }
  3. ב-method‏ onStop() של הפעילות, מבטלים את הרישום של הקריאה החוזרת (callback) של צילום המסך:

    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);