ในการสร้างประสบการณ์ มาตรฐานมากขึ้นสำหรับการตรวจหาภาพหน้าจอ 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" />
จากนั้นทำตามขั้นตอนเหล่านี้สำหรับแต่ละกิจกรรมในแอปที่ผู้ใช้อาจ จับภาพหน้าจอ:
ใช้ 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. } };
ลงทะเบียน 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); }
ในเมธอด
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);