728x90
안녕하세요. 이번 시간에는 앨범 사진을 이미지 뷰에 띄워주는 것을 구현해보도록 하겠습니다. 저번에 카메라에서 찍은 사진을 이미지 뷰에 띄워준 포스팅의 연장선입니다.
아직 전 포스팅을 안 보신 분이 있다면 먼저 읽고 오면 좋겠네요 ^^
https://stickode.tistory.com/302
개발 순서는 다음과 같습니다.
1. XML 파일 수정하기
2. 권한 승인 요청하기
3. 권한 승인 시 앨범 실행
4. 앨범 선택 이미지 uri 값을 받아 이미지뷰에 띄워주기.
1. XML 파일 수정하기
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/buttonCamera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="카메라"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/buttonAlbum"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/buttonAlbum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:layout_constraintStart_toEndOf="@id/buttonCamera"
android:text="앨범"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/imagePreview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/buttonCamera"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. 권한 승인 요청하기
권한을 요청하기 전에 필요한 권한을 Manifest에 추가해주도록 합시다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
앨범 버튼을 클릭했을 때 권한 요청을 하도록 아래와 같이 작성해줍시다.
val PERMISSION_Album = 101 // 앨범 권한 처리
// 앨범 버튼 클릭 리스너 구현
val albumBtn = findViewById<Button>(R.id.buttonAlbum) as Button
albumBtn.setOnClickListener{
requirePermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), PERMISSION_Album)
}
3. 권한 승인 시 앨범 실행
권한이 승인 된 경우에는 openGallaery가 실행되고 권한을 거부당한 경우에는 토스트 메시지가 띄워주도록 하였습니다.
/** 사용자가 권한을 승인하거나 거부한 다음에 호출되는 메서드
* @param requestCode 요청한 주체를 확인하는 코드
* @param permissions 요청한 권한 목록
* @param grantResults 권한 목록에 대한 승인/미승인 값, 권한 목록의 개수와 같은 수의 결괏값이 전달된다.
* */
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
permissionGranted(requestCode)
} else {
permissionDenied(requestCode)
}
}
private fun permissionGranted(requestCode: Int) {
when (requestCode) {
PERMISSION_CAMERA -> openCamera()
PERMISSION_Album -> openGallery()
}
}
private fun permissionDenied(requestCode: Int) {
when (requestCode) {
PERMISSION_CAMERA -> Toast.makeText(
this,
"카메라 권한을 승인해야 카메라를 사용할 수 있습니다.",
Toast.LENGTH_LONG
).show()
PERMISSION_Album -> Toast.makeText(
this,
"저장소 권한을 승인해야 앨범에서 이미지를 불러올 수 있습니다.",
Toast.LENGTH_LONG
).show()
}
}
fun openGallery() {
val intent = Intent(Intent.ACTION_PICK)
intent.type = MediaStore.Images.Media.CONTENT_TYPE
startActivityForResult(intent, REQUEST_STORAGE)
}
4. 앨범 선택 이미지 uri 값을 받아 이미지뷰에 띄워주기.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
when (requestCode) {
REQUEST_CAMERA -> {
realUri?.let { uri ->
imageView.setImageURI(uri)
}
}
REQUEST_STORAGE -> {
data?.data?.let { uri ->
imageView.setImageURI(uri)
}
}
}
}
}
결과 화면입니다.
코드 중간에 나오는 Logger 라이브러리는 스틱코드를 참고하시면 가져다 쓸 수 있습니다.
https://stickode.tistory.com/275
https://stickode.com/detail.html?no=2559
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] TextInputLayout 사용하여 로그인 화면 만들기 (0) | 2021.12.15 |
---|---|
[Kotlin][Android] 입력값의 태그 추출하기 (0) | 2021.12.14 |
[Kotlin][Android] 카메라로 찍은 사진 이미지 뷰에 띄워주기 (6) | 2021.12.03 |
[Kotlin][Android] 네트워크 모니터링 기능 (0) | 2021.11.27 |
[Kotlin][Android] 초대 메세지 공유하는 기능 만들기 (0) | 2021.11.24 |