[Android] 내용 제공자 (Content Provider)
한 앱에 대해서 데이터베이스를 만들고 만든 데이터베이스를 다른 앱에서 사용할 수는 없을까?
이 때 내용 제공자를 통해서 데이터베이스에 접근할 수 있다. (앱의 보안과 연관됨)
내용 제공자를 사용하기 위해서 새로 내용 제공자를 만들 수도 있지만, 이미 만들어져있는 내용 제공자를 사용해 정보를 가져오는 부분에 집중해서 공부하자.
안드로이드 앱의 구성요소로 액티비티 / 서비스 / 방송 수신자 / 내용 제공자가 있는데 마지막 부분인 내용 제공자에 대해 알아보자. 내용 제공자도 앱의 구성요소 중 하나이기 때문에 시스템에서 관리한다.
여기서 내용 (Content)에는 전화번호, 이미지, 텍스트 등등.. 여러가지가 될 수 있다.
내용 제공자를 사용할 때는 Resolver 객체를 사용한다.
우리가 얻으려는 데이터는 네트워크로부터 올 수 있고, 파일로부터 올 수 있고, 키보드로부터 오는 등.. 여러 가지 경로가 있다. 잠시 Java의 입출력을 생각해보자. InputStream을 추상화함으로써 입력을 처리했는데 안드로이드에서도 Resolver 객체를 사용해 데이터에 접근할 수 있다.
위와 같이 Provider는 Resolver를 통해서 데이터에 접근할 수 있다. (CRUD Create Read Update Delete) 여기서 Provider를 관리하는 Resolver는 유일한 주소인 uri를 가진다. (Uniform Resorce Identifier) 인터넷 상의 주소인 url과 비슷함.
내용 제공자를 이용해 앨범과 연락처를 조회해보자.
이미지 선택을 눌렀을 때 갤러리에서 사진을 가져오고 밑에 위치한 이미지 뷰의 이미지를 가져온 이미지로 바꿔보자.
버튼을 누를 시 인텐트를 이용해 갤러리 화면을 띄운다.
위에서 받은 101을 비교하고 맞다면 resolver를 생성해 선택한 사진을 보여준다.
InputStream 객체로부터 읽어온다. 이 때 이미지를 가진 파일은 Bitmap을 통해 처리한다. (코드 참조)
여기서 Intentview에서 다른 서비스를 이용하려면 권한이 있어야 한다.
SD 카드에 저장된 이미지 파일에 접근하기 위해 매니페스트 파일에 권한을 추가시킨다.
MainActivity와 build에도 코드를 추가해야 한다. (위험 권한 부여를 위함)
연락처 가져오기 버튼을 누르면 연락처 화면이 나타나고 선택한 연락처를 보여주자.
버튼을 누르면 연락처 선택 화면이 나타난다. (ChooseContacts 메서드)
사진의 경우와 마찬가지로 101과 비교하고 맞으면 연락처의 내용을 가져온다.
getContacts 메서드를 살펴보자.
Cursor는 Select 명령어의 Return 타입이다. 데이터베이스가 테이블 형태로 있다고 생각하자. (행 열이 있는 테이블)
쿼리문법에서 *는 모두를 의미. where는 조건 추가. order by는 정렬 기준. (데이터베이스에서 공부함)
1. uri 부분은 특정 사람의 연락처
2. 어떤 칼럼을 조회할 지 결정 null 이면 모든 칼럼을 가져옴
3. where부분 null 이면 조건 없음
4. 3 에 값이 있으면 조건 값을 대체하기 위해 사용
5. 정렬 기준 null 이면 정렬 없음
실행 시 John 에 대한 모든 정보를 나타낸다.
'Mobile > Android' 카테고리의 다른 글
[Android] 네트워킹 2 (0) | 2021.12.13 |
---|---|
[Android] 네트워킹 1 (0) | 2021.12.05 |
[Android] 모바일 데이터베이스 (0) | 2021.11.21 |
[Android] 음악 재생 플레이어 만들기 (0) | 2021.11.21 |
[Android] 리스트 보여주기 (0) | 2021.11.21 |
댓글
이 글 공유하기
다른 글
-
[Android] 네트워킹 2
[Android] 네트워킹 2
2021.12.13 -
[Android] 네트워킹 1
[Android] 네트워킹 1
2021.12.05 -
[Android] 모바일 데이터베이스
[Android] 모바일 데이터베이스
2021.11.21 -
[Android] 음악 재생 플레이어 만들기
[Android] 음악 재생 플레이어 만들기
2021.11.21