안드로이드 앱 개발하는 과정에서 캡처방지 하는 방법에 대해서 알아보겠습니다.
코드는 간단하고 다음과 같습니다.
* 캡처방지
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
* 캡처방지 해제
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
----------------------------------------------------------------------------------------------------------
추가적으로 WindowManager.LayoutParams 속성에 대해서 알압보겠습니다.
전부 다 알아볼 수는 없지만 몇개 예시에 대해서 알아보도록 하겠습니다.
//<LayoutParams의 속성의 종류>
//윈도우 뒤의 모든것을 흐리게 설정
FLAG_BLUR_BEHIND
//윈도우 뒤의 모든것을 어둡게 설정
FLAG_DIM_BEHIND
//윈도우 에서 키 입력 포커스를 갖지 않는다. 사용자가 키나 다른 버튼의 이벤트를 보낼수 없다. 어떤 포커스 윈도우 대신에 뒤에 남을 것
FLAG_NOT_FOCUSABLE
//윈도우는 터치 이벤트를 절대 받을수 없음
FLAG_NOT_TOUCHABLE
//윈도우가 포커스 될때 조차(FLAG_NOT_FOCUSABLE이 설정되지 않음) 윈도우 외부의 어떤 포인터 이벤트도 윈도우 뒤로 보내는것을 허용
FLAG_NOT_TOUCH_MODAL
//윈도우의 전체 화면 내에서, 경계(별명으로 상태표시줄) 주위의 장식을 무시
FLAG_LAYOUT_IN_SCREEN
//진동 설정
FLAG_DITHER
//사용자가 윈도우 표시되는 동안, 화면을 켜고 밝게 함
FLAG_KEEP_SCREEN_ON
//모든 화면 장식(상태표시줄 등)이 창이 표시 되는 동안 숨김
FLAG_FULLSCREEN
//FLAG_FULLSCREEN 과 화면 장식(상태표시줄 같은) 보여지는 것을 무시
FLAG_FORCE_NOT_FULLSCREEN
//사용자의 뺨이 화면에 닫는 등의 이벤트를 감지 하지 않기 원할때 필터 설정
FLAG_IGNORE_CHEEK_PRESSES
자주 사용되는 속성 WindowManager.LayoutParams 종류는 위와 같습니다.
필요한 부분은 따로 체크해두어 나중에 개발할 때 사용하면 되겠습니다.
* 전체코드
MainActivity.kt
//MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.tbSecure.setOnCheckedChangeListener { buttonView, isChecked ->
if(isChecked){
SecureWindow(true)
}else{
SecureWindow(false)
}
}
}
/** 캡처방지(Android) 설정&해제 */
fun SecureWindow(bool: Boolean){
if(bool){
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
}else{
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- activity_main.xml -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_secrue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="캡처방지 버튼"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ToggleButton
android:id="@+id/tb_secure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_secrue" />
</androidx.constraintlayout.widget.ConstraintLayout>
build.gralde(:app)에 viewBinding 설정
buildFeatures {
viewBinding true
}
* 캡처방지코드 적용 전
* 캡처방지코드 적용 후
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Andorid][kotlin] DeepLink 딥링크 알아보기 - 2편 (0) | 2022.02.22 |
---|---|
[Andorid][kotlin] DeepLink 딥링크 알아보기 - 1편 (0) | 2022.02.22 |
[kotlin][Android] SHA-1 확인하는 방법(Firebase) (0) | 2022.02.21 |
[Android][kotlin] QR코드 스캐너 만들기 (QRCode Scan Example) (0) | 2022.02.18 |
[Android][Kotlin] 카카오 로그인 API연동(Kakao Login) - 3 (0) | 2022.02.10 |
[Android][Kotlin] 카카오 로그인 API연동(Kakao Login) - 2 (2) | 2022.02.10 |
[Android][Kotlin] 카카오 로그인 API연동(Kakao Login) - 1 (0) | 2022.02.10 |
[Android] Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle' 오류해결 (0) | 2022.02.09 |