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

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

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

Use Case ที่รองรับ

ใน 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. ลงทะเบียน Callback ของภาพหน้าจอในเมธอด 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() ของกิจกรรม ให้ยกเลิกการลงทะเบียน Callback สำหรับภาพหน้าจอ:

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