基於一些理由,我們可能會想要禁止使用者對我們的 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) {}
})
}
}









