在使用者擷取裝置螢幕畫面時偵測

訊息顯示「付款應用程式偵測到此螢幕截圖」
圖 1. 系統提供的浮動式訊息範例 這個面板會在使用者針對支援 螢幕截圖偵測 API

如要建立更標準化的螢幕截圖偵測體驗, Android 14 推出了可保護隱私權的螢幕截圖偵測功能 也能使用 Google Cloud CLI 或 Compute Engine API此 API 可讓應用程式依個別活動登錄回呼。這些 當使用者接受回呼時,系統會叫用使用者並通知使用者 螢幕截圖。

支援的用途

在 Android 14 中,只有在使用者執行 特定的硬體按鈕組合。API 未偵測到 擷取的螢幕截圖、螢幕截圖、 包括 ADB,或在檢測設備測試中擷取裝置的 目前的畫面內容

導入步驟

如要新增螢幕截圖偵測功能,請宣告新的 DETECT_SCREEN_CAPTURE 安裝期間權限:

<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />

接著,針對應用程式中使用者可能會前往的每個活動完成上述步驟 擷取螢幕截圖:

  1. 覆寫 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. 在活動的 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() 方法中,取消註冊螢幕截圖回呼:

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