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

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

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

תרחישים נתמכים לדוגמה

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

שלבי ההטמעה

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

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

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

  1. כדי להטמיע קריאה חוזרת (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.
            }
        };
  2. ב-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);
    }
  3. ב-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);