为了创建更标准化的屏幕截图检测体验,Android 14 引入了一个保护隐私的屏幕截图检测 API。此 API 允许应用基于每个 Activity 注册回调。当用户在该 Activity 可见时截取屏幕截图时,将调用这些回调,并通知用户。
支持的用例
在 Android 14 中,如果用户执行特定组合的硬件按钮按下操作,系统 API 才会检测到屏幕截图。该 API 不会检测在运行与屏幕截图相关的测试命令(包括 ADB)或在捕获设备当前屏幕内容的检测测试中截取的屏幕截图。捕获设备的当前屏幕内容
实现步骤
要添加屏幕截图检测,请声明新的 DETECT_SCREEN_CAPTURE
安装时权限
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
然后,为应用中用户可能捕获屏幕截图的每个 Activity 完成以下步骤
通过覆盖
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. } };
在 Activity 的
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); }
在 Activity 的
onStop()
方法中,注销屏幕截图回调Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
控制捕获屏幕截图的能力
如果您不希望应用 Activity 的内容显示在屏幕截图中或不安全的显示器上,请设置 FLAG_SECURE
显示标志。
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);