ตรวจจับเมื่อผู้ใช้จับภาพหน้าจอของอุปกรณ์

ข้อความระบุว่า "แอป Pay ตรวจพบภาพหน้าจอนี้"
รูปที่ 1 ตัวอย่างข้อความแจ้งที่ระบบแสดง เมื่อผู้ใช้จับภาพหน้าจอของแอปที่รองรับ Screenshot Detection API

Android 14 เปิดตัว API การตรวจหาภาพหน้าจอที่รักษาความเป็นส่วนตัว เพื่อสร้างประสบการณ์การใช้งานที่ได้มาตรฐานมากขึ้นสำหรับการตรวจหาภาพหน้าจอ API นี้ช่วยให้แอปสามารถลงทะเบียนการเรียกกลับตามกิจกรรม ระบบจะเรียกใช้ การเรียกกลับเหล่านี้และแจ้งเตือนผู้ใช้เมื่อผู้ใช้ จับภาพหน้าจอขณะที่กิจกรรมนั้นแสดงอยู่

กรณีการใช้งานที่รองรับ

ใน 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. ใน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 การแสดงผล FLAG_SECURE

Kotlin

activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)

Java

activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);