Android

안드로이드 권한 정리

그란. 2023. 6. 2. 17:24

카메라 쓴다고 카메라 권한 넣고 

<uses-permission android:name="android.permission.CAMERA" />

 

이미지 쓸거라고 

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

권한 넣는게 아니다.

 

이 권한을 언제 사용해야 하고 하지 말아야하는지 정리해보자.

 

 

1. 이미지 피커

  • 단순 이미지만 불러오는 경우
    • 권한 필요없음, 시스템 이미지 피커를 사용하면 됨 
private val callbackImageContracts = registerForActivityResult(ActivityResultContracts.PickMultipleVisualMedia(EXTRA_MAX_IMAGE)) { uris ->
    if (uris != null && uris.isNotEmpty()) {
        viewModel.sendImages(uris)
    }
}

-> 구글에서 만든 세련된 BottomSheet 이미지 피커가 뜸 

 

  • 이미지 피커 UI를 커스텀 하는 경우
    • 권한 필요함, ContentProvider로 쿼리해서 사용해서 가져오면 됨
return contentResolver.query(
    contentUri,
    projection,
    selectionBundle,
    null
)

 

2. 카메라

  • 시스템 카메라를 사용하는 경우 
    • 권한 필요없음, CaptureVideo 또는 TakePicture 사용하면 됨 
private val takePictureLauncher =
        registerForActivityResult(ActivityResultContracts.CaptureVideo()) { activityResult: Boolean ->
            if (activityResult) {
                viewModel.input.saveCameraImage()
            }
        }
        
 private val takePictureLauncher =
        registerForActivityResult(ActivityResultContracts.TakePicture()) { activityResult: Boolean ->
            if (activityResult) {
                viewModel.input.saveCameraImage()
            }
  • 내장 카메라를 사용할 경우 ( 커스텀 UI ) 
    • 권한 필요함

 

3. 카드 인식하기 

  • 카메라로 인식한다고 카메라 권한 넣지말자 
  • PlaymentsClient 사용하면됨
 fun createPaymentsClient(activity: Activity): PaymentsClient {
        val walletOptions = Wallet.WalletOptions.Builder()
                .setEnvironment(Constants.PAYMENTS_ENVIRONMENT)
                .build()

        return Wallet.getPaymentsClient(activity, walletOptions)
    }

 

4. 문자메시지에서 인증코드 바로 입력하기 

  • 문자 읽을거라고 READ_SMS 권한 넣지말자
  •  SMS Retriever API 사용하면 됨

단 서버에서도 문자를 보낼때 하단의 형식으로 맞춰줘야함

 

<#> 인증번호 000000 를 입력창에 기입해주세요. AbcDeFghijK

1. <#> 로 시작해야함
2. 뒤에 해시스트링을 명시해야함 (11자)

 

5. 미디어 다운로드 

  • SDK 분리 필요 : Q이상과 Q미만 
  • 29(Q) 이상 : 권한 없이 DownloadManager 사용
  • 29(Q) 미만 : WRITE_EXTERNAL_STORAGE 권한 승인 후 DownloadManager 사용