2022.01.24 TIL

김민수·2022년 1월 24일
0

Android

권한 설정 하기

  • Manifest.xml에 필요한 권한 명시
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  • AppCompatActivity에서 권한 체크
when {
    checkSelfPermission(
        Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) -> {
          // 정상적 수행
    }
    //사용자가 명시적으로 권한을 거부한 경우 -> true
    shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE) -> {
        showReasonForPermission()
    }
    //사용자가 권한요청을 처음 보거나, 다시 묻지 않음, 권한요청을 허용한 경우 -> false
    // requestPermissionLauncher는 수 회 이상 권한을 거부했을 경우 launch 되지 않음
    else -> {
        requestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
    }
}
  • Fragment에서 권한 체크
when {
    // 권한이 있을 때
    ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED -> {
        getPhoto()
    }
    //사용자가 명시적으로 권한을 거부한 경우 -> true
    shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE) -> {
        showReasonForPermission()
    }
    //사용자가 권한요청을 처음 보거나, 다시 묻지 않음, 권한요청을 허용한 경우 -> false
    // requestPermissionLauncher는 수 회 이상 권한을 거부했을 경우 launch 되지 않음
    // ActivityResultLauncher는 onCreate(), onAttach() 등 fragment 생성 시에 초기화
    else -> {
        requestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
    }
}
  • 앱의 권한 설정으로 이동하기
val intent = Intent(
    Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
    Uri.parse("package:${requireActivity().packageName}")
    ).apply {
        this.addCategory(Intent.CATEGORY_DEFAULT)
        this.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    }
    
startActivity(intent)
profile
도전을 즐기는

0개의 댓글