우선 안드로이드에서 사진이랑 갤러리를 이용하려면 권한을 명세해야한다.
Manifest에 가서 아래 코드를 추가하자.
권한을 요청하는 로직은 저번에 registerForActivityResult을 이용한 콜백함수를 사용했다.
포스팅했으니 생략
카메라를 켜자
deprecated;;;,,, 공부해서 보완하겠음.
startActivityForResult를 사용했으니 onActivityResult를 작성하자.
data는 object타입이라서 bitmap으로 형변환하지 않으면 이미지뷰에 세팅 불가능하다.
data에 null이 올 수 있으므로 ?로 null체크 잘 해주자.
잘된다.
다음은 갤러리에서 사진을 저장해보자.
우선 이미지의 uri를 가져와서 저장할 uri프로퍼티를 추가하자.
촬영한 이미지를 저장한 Uri를 미디어스토어에 생성하는 메소드를 작성하자
(MediaStore - 외부 저장소를 관리하는 데이터베이스, 안드로이드10부터는 이것을 통해서만 외부 저장소에 파일을 읽고 쓸수 있도록 보안 정책이 바뀌었음.)
아까 작성했던 openCamera를 Uri생성하는 로직을 추가시켜서 수정하고
uri의 파일명을 생성하는 newFileName메소드도 추가하자.
MediaStore에 저장해야지 갤러리에 사진이 저장된다.
이제 Uri를 사용해서 미디어스토어에 저장된 이미지를 읽어오는 메소드를 작성하자.
입력 파라미터 Uri를 받아서 Bitmap으로 반환해주는 메서드다.
그리고 contentResolver를 binding.root.contentResolver로 호출하고 있는데 나는 viewBinding에 프레그먼트에서 작업하고 있기 때문이다.
액티비티에서 작업 시 this.contentResolver로 호출하자.
onActivityResult를 변경해서 Uri로 사진을 가져와보자.
굿
이번엔 갤러리에서 사진을 가져와보자
btnGallery버튼을 누르면 openGallery()가 실행되도록하자.
다음은 openGallery()를 작성하자.
intent파라미터로 ACTION_PICK을 사용하면 intent.type에서 설정한 종류의 데이터를 MediaStore에서 불러와 목록으로 나열한 후 선택할 수 있는 앱이 실행된다.
onActivityResult에서 storage쪽을 수정하자.
호출된 갤러리에서 이미지를 선택하면 data의 data속성으로 해당 이미지의 Uri가 전달된다.
전달된 uri로 이미지뷰에 세팅하자.
가운데가 갤러리로 받은 이미뷰를 세팅하는 쪽인데 잘된다.