स्क्रीनशॉट का पता लगाने के लिए, Android 14 में एक ऐसा एपीआई जोड़ा गया है जो निजता बनाए रखता है. इस एपीआई की मदद से, ऐप्लिकेशन हर गतिविधि के आधार पर कॉलबैक रजिस्टर कर सकते हैं. जब कोई उपयोगकर्ता उस गतिविधि के दिखने के दौरान स्क्रीनशॉट लेता है, तो ये कॉलबैक ट्रिगर होते हैं और उपयोगकर्ता को सूचना दी जाती है.
इस्तेमाल के उदाहरण
Android 14 में, सिस्टम एपीआई सिर्फ़ तब स्क्रीनशॉट का पता लगाता है, जब उपयोगकर्ता हार्डवेयर बटन को दबाकर कोई खास कॉम्बिनेशन बनाता है. एपीआई, स्क्रीनशॉट से जुड़े टेस्ट कमांड चलाते समय लिए गए स्क्रीनशॉट का पता नहीं लगाता. इनमें ADB भी शामिल है. इसके अलावा, यह उन इंस्ट्रूमेंटेशन टेस्ट में भी स्क्रीनशॉट का पता नहीं लगाता जो डिवाइस की मौजूदा स्क्रीन के कॉन्टेंट को कैप्चर करते हैं.
लागू करने का तरीका
स्क्रीनशॉट का पता लगाने की सुविधा जोड़ने के लिए, इंस्टॉल के समय मांगी जाने वाली नई DETECT_SCREEN_CAPTURE
अनुमति का एलान करें:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
इसके बाद, अपने ऐप्लिकेशन में हर उस गतिविधि के लिए यह तरीका अपनाएं जहां उपयोगकर्ता स्क्रीनशॉट कैप्चर कर सकते हैं:
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. } };
गतिविधि के
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); }
ऐक्टिविटी के
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);