내가 원하는 조건은 인앱에서는 캡쳐가 가능하고, 백그라운드 및 멀티태스킹 전환 시 보안상의 이유로 화면을 노출하지 않도록 하는 것이었다.
class MainActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onResume() {
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
super.onResume()
}
override fun onPause() {
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
super.onPause()
}
}
안드로이드 API 33 부터 Activity 에 추가된 setRecentsScreenshotEnabled() 메서드를 사용했다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
setRecentsScreenshotEnabled(false)
} else {
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
}
}
}
setRecentsScreenshotEnabled(false) 로 설정하게 되면 Recent Screen( 최근 화면 )을 스크린 샷 할 수 없는 상태가 된다.
