检测用户何时截取设备屏幕截图

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

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

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

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