안드로이드 이미지 업로드

Jiyoon Chae·2021년 10월 22일
0

안드로이드

목록 보기
11/23

1. 권한 체크

<안드로이드 개발자 문서 참고!>

1-1 앱에 이미 권한이 부여되었는지 확인

사용자가 이미 앱에 특정 권한을 부여했는지 확인하려면 

ContextCompat.checkSelfPermission()

(https://developer.android.com/reference/androidx/core/content/ContextCompat?hl=ko#checkSelfPermission(android.content.Context,%20java.lang.String))
메서드에 권한을 전달.
이 메서드는 앱에 권한이 있는지에 따라 
[PERMISSION_GRANTED] 또는 [PERMISSION_DENIED]
(https://developer.android.com/reference/android/content/pm/PackageManager?hl=ko#PERMISSION_GRANTED)
(https://developer.android.com/reference/android/content/pm/PackageManager?hl=ko#PERMISSION_DENIED) 를 반환합니다.

1-2 앱에 권한이 필요한 이유 설명

ContextCompat.checkSelfPermission() 메서드가 PERMISSION_DENIED를 반환하면[shouldShowRequestPermissionRationale()]을 호출한다.
(https://developer.android.com/reference/androidx/core/app/ActivityCompat?hl=ko#shouldShowRequestPermissionRationale(android.app.Activity,%20java.lang.String))

이 메서드가 true를 반환하면 다이얼로그를 사용자에게 표시. 이 UI에서 사용자가 사용 설정하려는 기능에 특정 권한이 필요한 이유를 설명한다.

1-3 권한 요청

사용자에게 안내 팝업이 표시되거나 shouldShowRequestPermissionRationale()의 반환 값에서 이번에는 안내 팝업을 표시하지 않아도 된다고 나타내면 권한을 요청한다. 사용자에게 시스템 권한 대화상자가 표시되고 사용자는 여기서 특정 권한을 앱에 부여할지 선택할 수 있다.

일반적으로 권한 요청의 일부로 요청 코드를 직접 관리하고 이 요청 코드를 권한 콜백 로직에 포함합니다. 또 다른 옵션은 AndroidX 라이브러리에 포함된 [RequestPermission] 계약을 사용하는 것으로
(https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestPermission?hl=ko)
여기서 시스템이 권한 요청 코드를 관리하도록 허용(https://developer.android.com/training/permissions/requesting?hl=ko#allow-system-manage-request-code)합니다. RequestPermission 계약을 사용하면 로직이 간소화되므로 가능하면 사용하는 것이 좋습니다.

  • 단일 권한을 요청하려면 [RequestPermission]을 사용.

  • 여러 권한을 동시에 요청하려면 [RequestMultiplePermissions]를 사용.

다음 단계는 RequestPermission 을 사용하는 방법입니다.
프로세스는 RequestMultiplePermissions 와 동일합니다.

  1. 활동 또는 프래그먼트의 초기화 로직에서 [ActivityResultCallback] 구현을 [registerForActivityResult()] 호출에 전달합니다. ActivityResultCallback은 앱이 권한 요청에 대한 사용자의 응답을 처리하는 방법을 정의합니다.

    [ActivityResultLauncher] 유형인 registerForActivityResult()의 반환 값을 계속 참조합니다.

  2. 필요할 때 시스템 권한 대화상자를 표시하려면 이전 단계에서 저장한 ActivityResultLauncher 인스턴스에서 [launch()] 메서드를 호출합니다.

    launch()가 호출되면 시스템 권한 대화상자가 표시됩니다. 사용자가 선택하면 시스템은 개발자가 이전 단계에서 정의한 ActivityResultCallback 구현을 비동기적으로 호출합니다.

  3. 사용자가 시스템 권한 대화 상자에 응답하면 시스템은 앱의 onRequestPermissionsResult() 구현을 호출합니다. 시스템은 다음 코드 스니펫과 같이 사용자 응답을 권한 대화상자에 전달하고 개발자가 정의한 요청 코드도 전달합니다.

2. 이미지 가져오기

private fun navigatePhotos() {
        val intent = Intent(Intent.ACTION_GET_CONTENT)
        intent.type = "image/*"
        startActivityForResult(intent, 2000)

    }

requestCode 값에 따라 이미지 uri를 받아서 화면에 출력해주면 된다.

2-1 파일의 절대 경로 생성하기

3. Retrofit 사용해서 서버에 이미지 등록하기

profile
바닐라라떼 좋아☕

0개의 댓글