Để tạo trải nghiệm chuẩn hơn đối với việc phát hiện ảnh chụp màn hình, Android 14 ra mắt API phát hiện ảnh chụp màn hình nhằm bảo vệ quyền riêng tư. API này cho phép ứng dụng đăng ký lệnh gọi lại dựa trên từng hoạt động. Khi người dùng chụp ảnh màn hình trong khi hoạt động đó đang hiển thị, những lệnh gọi lại này sẽ được gọi và người dùng sẽ nhận được thông báo.
Trường hợp sử dụng được hỗ trợ
Trong Android 14, API hệ thống chỉ phát hiện ảnh chụp màn hình nếu người dùng thực hiện thao tác nhấn tổ hợp nút phần cứng cụ thể. API này không phát hiện được ảnh chụp màn hình được chụp khi chạy lệnh kiểm thử liên quan đến ảnh chụp màn hình (bao gồm cả ADB) hoặc trong các chương trình kiểm thử đo lường có ghi lại nội dung màn hình hiện tại của thiết bị.
Các bước triển khai
Để thêm tính năng phát hiện ảnh chụp màn hình, hãy khai báo quyền DETECT_SCREEN_CAPTURE
(mới) khi cài đặt:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Sau đó, hãy hoàn tất các bước sau cho từng hoạt động trong ứng dụng mà có thể người dùng sẽ chụp ảnh màn hình:
Triển khai lệnh gọi lại bằng cách ghi đè hàm
onScreenCapture()
. Trong lệnh gọi lại này, ứng dụng có thể thực hiện hành động, chẳng hạn như cảnh báo một người dùng khác rằng ai đó đã chụp ảnh màn hình một cuộc trò chuyện qua tin nhắn.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. } };
Trong phương thức
onStart()
của hoạt động, hãy đăng ký lệnh gọi lại của ảnh chụp màn hình.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); }
Trong phương thức
onStop()
của hoạt động, hãy huỷ đăng ký lệnh gọi lại của ảnh chụp màn hình:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Kiểm soát tính năng chụp ảnh màn hình
Nếu bạn không muốn nội dung hoạt động của một ứng dụng xuất hiện trong ảnh chụp màn hình hoặc trên màn hình không bảo mật, hãy thiết lập cờ hiển thị FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);