카메라 쓴다고 카메라 권한 넣고
<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 사용
'Android' 카테고리의 다른 글
RecyclerView Drag & Drop (0) | 2023.05.18 |
---|---|
영상URL에서 샘플 이미지 가져오기 ( 코일 ) (0) | 2023.02.21 |
FlowBinding 사용하여 코드 간소화 (0) | 2023.01.11 |
QR코드 스캔 커스텀 ( + 플래시 ) (0) | 2023.01.04 |
[CI/CD] fastlane : App Distribution + Slack Message (0) | 2022.11.24 |