안드로이드
[Android] [인스타그램 클론 코딩] 갤러리 접근 허용 & 사진 이미지 뷰에 등록 (registerForActivityResult() 사용)
먹구루미
2024. 4. 3. 15:34
✏️ TIL(Today I Learned)
맨 왼쪽의 파란색 + 버튼이 겹쳐진 이미지 뷰를 클릭하면, 갤러리 접근 허용 권한을 선택할 수 있게 했다.
사용자가 허용한다면, 갤러리를 열어 선택된 사진이 이미지 뷰에 등록되도록 했다.
권한을 얻기 위해, AndroidManifest.xml에 아래 코드를 추가한다.
// AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
그다음 Activity에서 이미지뷰 클릭 시, 갤러리 접근 권한을 확인한다.
registerForActivityResult()를 사용하여, 권한이 허용되어 있으면 갤러리를 열어 선택한 사진을 이미지뷰에 등록한다.
권한이 없으면, 권한을 허용 여부를 묻도록 했다.
class MainActivity : AppCompatActivity() {
private lateinit var ivCamera: ImageView
private var imageUri: Uri? = null
// 권한에 따라 갤러리 열기
private val requestPermissionLauncher: ActivityResultLauncher<String> =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
if (isGranted) {
openGallery()
}
}
// 선택한 사진 이미지뷰에 등록하기
private val pickImageLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data: Intent? = result.data
data?.data?.let {
imageUri = it
ivCamera.setImageURI(imageUri)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//프로필 사진 이미지뷰 클릭 시
ivCamera = findViewById(R.id.Iv_camera)
ivCamera.setOnClickListener {
// 갤러리 접근 권한 확인
if (ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
openGallery()
} else {
requestPermissionLauncher.launch(android.Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
}
private fun openGallery() {
val gallery = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI)
pickImageLauncher.launch(gallery)
}
}