כדי ליצור חוויה סטנדרטית יותר לזיהוי צילומי מסך, ב-Android 14 אנחנו משיקים API לזיהוי צילומי מסך ששומר על הפרטיות. ה-API הזה מאפשר לאפליקציות לרשום קריאות חוזרות (callbacks) על בסיס פעילות. פונקציות ה-callbacks האלה מופעלות, והמשתמש מקבל הודעה, כשהמשתמש מצלם צילום מסך בזמן שהפעילות הזו גלויה.
תרחישים נתמכים
ב-Android 14, ממשק ה-API של המערכת מזהה צילום מסך רק אם המשתמש מבצע שילוב ספציפי של לחיצות על לחצני החומרה. ה-API לא מזהה צילומי מסך שצולמו במהלך הפעלת פקודות בדיקה שקשורות לצילומי מסך, כולל ADB, או בתוך בדיקות של מכשירי מדידה שמתעדים את תוכן המסך הנוכחי של המכשיר.
שלבי ההטמעה
כדי להוסיף זיהוי של צילומי מסך, מגדירים את ההרשאה החדשה DETECT_SCREEN_CAPTURE
בזמן ההתקנה:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
לאחר מכן, השלימו את השלבים הבאים לכל פעילות באפליקציה שבה המשתמשים עשויים לצלם צילומי מסך:
כדי להטמיע פונקציית קריאה חוזרת, משנים את ברירת המחדל של הפונקציה
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. } };
ב-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);