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

ההודעה 'אפליקציית 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. כדי להטמיע קריאה חוזרת, מחליפים את הפונקציה 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. בשיטה 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. בשיטה 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);