Android:禁止螢幕截圖

Photo by ShengGeng Lin on Unsplash
Photo by ShengGeng Lin on Unsplash
基於一些理由,我們可能會想要禁止使用者對我們的 app 做螢幕截圖。在 Android 中,我們可以用 WindowManager.LayoutParams.FLAG_SECURE 來達到此效果。

基於一些理由,我們可能會想要禁止使用者對我們的 app 做螢幕截圖。在 Android 中,我們可以用 WindowManager.LayoutParams.FLAG_SECURE 來達到此效果。在下方的程式碼中,我們只要在 Activity.onCreate() 中設定 WindowManager.LayoutParams.FLAG_SECURE 即可。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        window.setFlags(
            WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE,
        )
    }
}

若使用者在有設定 WindowManager.LayoutParams.FLAG_SECURE 的畫面上做螢幕截圖的話,系統會自動顯示「基於安全性原則,無法拍攝截圖」的訊息。

在設定好 WindowManager.LayoutParams.FLAG_SECURE 之後,你也可以隨時用下方的程式碼來清除此 flag。

window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)

最後,要注意的是,此 WindowManager.LayoutParams.FLAG_SECURE 只會影響當前的 Activity。如果你想要每一個 Activity 都禁止截圖的話,你可以在 ActivityLifecycleCallbacks.onActivityCreated() 中設定 WindowManager.LayoutParams.FLAG_SECURE。

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
   
        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
                activity.window.setFlags(
                    WindowManager.LayoutParams.FLAG_SECURE,
                    WindowManager.LayoutParams.FLAG_SECURE
                )
            }

            override fun onActivityStarted(activity: Activity) {}
            override fun onActivityResumed(activity: Activity) {}
            override fun onActivityPaused(activity: Activity) {}
            override fun onActivityStopped(activity: Activity) {}
            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
            override fun onActivityDestroyed(activity: Activity) {}
        })
    }
}
發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You May Also Like
Photo by Hans-Jurgen Mager on Unsplash
Read More

Kotlin Coroutine 教學

Kotlin 的 coroutine 是用來取代 thread。它不會阻塞 thread,而且還可以被取消。Coroutine core 會幫你管理 thread 的數量,讓你不需要自行管理,這也可以避免不小心建立過多的 thread。
Read More