Untuk membuat pengalaman yang lebih standar dalam mendeteksi screenshot, Android 14 memperkenalkan API deteksi screenshot yang menjaga privasi. API ini memungkinkan aplikasi mendaftarkan callback per aktivitas. Callback ini dipanggil, dan pengguna akan diberi tahu saat pengguna mengambil screenshot ketika aktivitas itu terlihat.
Kasus penggunaan yang didukung
Di Android 14, API sistem hanya mendeteksi screenshot jika pengguna melakukan kombinasi penekanan tombol fisik tertentu. API tidak mendeteksi screenshot yang diambil saat menjalankan perintah pengujian terkait screenshot, termasuk ADB, atau dalam uji instrumentasi yang mengambil konten layar saat ini di perangkat.
Langkah-langkah implementasi
Untuk menambahkan deteksi screenshot, deklarasikan izin waktu penginstalan
DETECT_SCREEN_CAPTURE
yang baru:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Kemudian, selesaikan langkah-langkah berikut untuk setiap aktivitas di aplikasi Anda yang dapat digunakan pengguna untuk mengambil screenshot:
Implementasikan callback dengan mengganti fungsi
onScreenCapture()
. Dalam callback ini, aplikasi Anda dapat mengambil tindakan, seperti memperingatkan pengguna lain bahwa seseorang mengambil screenshot percakapan pesan.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. } };
Dalam metode
onStart()
aktivitas, daftarkan callback screenshot.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); }
Dalam metode
onStop()
aktivitas, batalkan pendaftaran callback screenshot:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Kemampuan kontrol untuk mengambil screenshot
Jika Anda tidak ingin konten aktivitas aplikasi muncul dalam screenshot, atau
di layar yang tidak aman, tetapkan flag tampilan FLAG_SECURE
.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);