[Android&Kotlin] - Camera App(카메라 앱)
1. Project생성정보
- Package Name : com.farmerkyh.study.calcurator
- Language : Kotlin
- Minimum SDK : API 23: Android 6.0 (Marshmallow)
2. Android Version정보
- Android Studio : 4.1.2 (2020.12.20)
- Java : 1.8.0_242
- AVD Test API : 29
- Kotlin Plug in version : 1.4.32-release-Sdudio4.1-1
3. Layout / 실행화면
4. 디렉토리 및 파일 구조
5. 프로젝트 소스
- 프로젝트 전체를 올릴 려고 했으나 10M 이상 초과 되어 파일들만 upload함
6. 카메라 등 기타 특징
//개발한 앱에서 카메라 사진찍는 방법 2가지
// 첫번째. 개발한 앱에서 카메라 API를 이용해서 직접 사진을 찍고 사진을 얻어 오는 방법
// 정점, 사진찍기 속도가 빠르다.
// 단점, 폰 기종마다 카메라 성능등이 달라 어려움이 많다.
// 두번째. 카메라 APP을 이용하는 방법 (thumbnail방식)
// a. 진행 과정
// 1. 개발한 앱 <-> 카메라 APP <-> 카메라
// b. 진행 과정 상세
// 1. 개발한 앱에서 카메라 APP에 사진찍어달라 요청
// 2. 카메라 APP은 카메라를 통해 사진을 찍고, 사진을 받아온다.
// 3. 카메라 APP은 전달받은 사진을 다시 개발한 앱으로 전송한다.
// c. 특징
// 1. 위와 진행과정 같은 Process방식은 INTENT를 이용해야 된다.
// 2. INTENT의 용량은 제한적이다. 그래서 thumbnail방식으로만(작은size) 주고 받는다.
// 세번째. 카메라 APP을 이용하는 방법 (Provider방식)
// - 카메라 원본사이즈를 원한다면 Provider방식으로 구현해야 된다.
// a. 진행 과정
// 1. 개발한 앱 -> 저장소에 임시로 파일 생성
// 2. 개발한 앱 <-> 카메라 APP <-> 카메라
// b. 진행 과정 상세
// 1. 개발한 앱에서 저장소에 임시파일 하나를 생성 후 image_uri를 얻어온다.
// 2. 개발한 앱에서 카메라 APP에 사진찍어달라 요청
// - 이때 image_uri를 전송하면서 사진을 이곳에 저장해달라고 요청한다.
// 3. 카메라 APP은 카메라를 통해 사진을 찍고, 사진을 받아온다.
// - 받아온 사진을 image_uri에 저장 한다.
// 4. 카메라 APP은 image_uri에 저장후 개발한 앱으로 결과를 전송한다.
// 5. 개발한 앱은 image_uri에서 사진을 불러와 사용한다.
// File Provider 란
// 1. 임시로 다른 APP에게 홈디렉토리(홈저장소)에 접근할 수 있도록 권한을 부여하는 역할을 담당
// File Provider 특징
// 1. 저장소는 개발한 앱에서는 홈디렉토리와 같다. (앱에서 마음대로 접근가능)
// 2. 카메라 APP은 개발한 앱.홈디렉토리에 접근 할 수 없다.
// 3. 이때 카메라 APP에 임시권한부여를 해줘야 된다.
// 4. 임시권한부여를 위해서 File Provider를 제공한다.
// 5. File Provider를 이용해서 권한이 부여된 image_url을 만들어 카메라 APP으로 전송해준다.
// 6. 카메라 APP은 권한 부여받은 image_url에 접근할 수 있다.
// 저장소 종류
// 1. 일반저장소와 케시저장소 2가지 이다.
// 2. 일반저장소
// - APP 삭제 되지 않는 이상 일반저장소의 파일들은 계속 유지 된다.
// 3. 케시저장소(임시저장소)
// - 앱이 실행되고 있을때는 유지가 된다.
// - 앱이 종료되었을때는 clear될 수 도 있다.
// - Android os는 기타APP들이 수행도중 저장소가 부족하면 종료된 APP의 캐시저장소를 clear한다.
//
//기본적으로 카메라 미리보기는 사진이미지가 깨져 보인다.
//원본이미지를 보고 싶다면 (간략)
// 1. 카메라가 사진을 찍은 후 -> 카메라 APP에서 저장소에 저장 후 -> 앱에서 저장소에있는 원본이미지 조회
//원본이미지를 보고 싶다면 (상세) - Provider 이용
// 1. 개발한 앱에서 Provider를 이용해서 저장소_image_Uri생성
// 2. 개발한 앱에서 > 카메라 APP을 호출 시 저장소_image_Uri 전송
// 3. 카메라 APP이 카메라를 구동시킨다.
// 4. 카메라에서 사진을 찍은 후 사진을 카메라 APP으로 전송한다.
// 5. 카메라 APP은 저장소_image_Uri 를 이용해 사진을 저장한다.
// 6. 개발한 앱은 저장소_image_Uri 에서 사진을 불러드릴 수 있다.
7. 소스별 조요 내용 설명
a. AndroidMenifest.xml
b. provider_paths.xml
c. provider_paths.xml
d. MainActivity.xml