यह पता लगाना कि उपयोगकर्ताओं ने डिवाइस का स्क्रीनशॉट कब लिया

मैसेज में लिखा है कि 'Pay ऐप्लिकेशन को इस स्क्रीनशॉट का पता चला है'
पहली इमेज. सिस्टम की ओर से उपलब्ध कराए गए टोस्ट मैसेज का उदाहरण. यह मैसेज तब दिखता है, जब उपयोगकर्ता ऐसे ऐप्लिकेशन का स्क्रीनशॉट लेता है जो स्क्रीनशॉट का पता लगाने वाले एपीआई के साथ काम करता है.

स्क्रीनशॉट का पता लगाने के लिए, Android 14 में निजता बनाए रखने वाला स्क्रीनशॉट का पता लगाने वाला एपीआई पेश किया गया है. इससे, स्क्रीनशॉट का पता लगाने के लिए एक स्टैंडर्ड तरीका उपलब्ध कराया जाता है. इस एपीआई की मदद से, ऐप्लिकेशन हर गतिविधि के हिसाब से कॉलबैक रजिस्टर कर सकते हैं. जब उपयोगकर्ता को गतिविधि दिख रही होती है और वह स्क्रीनशॉट लेता है, तब इन कॉलबैक को शुरू किया जाता है और उपयोगकर्ता को इसकी सूचना दी जाती है.

इस्तेमाल के उदाहरण

Android 14 में, सिस्टम एपीआई सिर्फ़ तब स्क्रीनशॉट का पता लगाता है, जब उपयोगकर्ता हार्डवेयर बटन को किसी खास कॉम्बिनेशन में दबाता है. यह एपीआई, स्क्रीनशॉट से जुड़ी टेस्ट कमांड चलाने के दौरान लिए गए स्क्रीनशॉट का पता नहीं लगाता. जैसे, ADB या इंस्ट्रुमेंटेशन टेस्ट के दौरान लिए गए स्क्रीनशॉट. इंस्ट्रुमेंटेशन टेस्ट, डिवाइस की मौजूदा स्क्रीन का कॉन्टेंट कैप्चर करते हैं.

लागू करने का तरीका

स्क्रीनशॉट का पता लगाने की सुविधा जोड़ने के लिए, इंस्टॉल-टाइम की नई DETECT_SCREEN_CAPTURE अनुमति का एलान करें:

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

इसके बाद, अपने ऐप्लिकेशन में मौजूद हर उस गतिविधि के लिए यह तरीका अपनाएं जहां उपयोगकर्ता स्क्रीनशॉट कैप्चर कर सकते हैं:

  1. 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. गतिविधि के 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. ऐक्टिविटी के 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);