Skip to content

ContentProvider 학습: 시스템 연락처 접근 및 커스텀 Provider 구현#25

Merged
sh1mj1 merged 7 commits intodevfrom
android/4components/content-provider
May 22, 2025
Merged

ContentProvider 학습: 시스템 연락처 접근 및 커스텀 Provider 구현#25
sh1mj1 merged 7 commits intodevfrom
android/4components/content-provider

Conversation

@sh1mj1
Copy link
Owner

@sh1mj1 sh1mj1 commented May 22, 2025

1. 시스템 ContentProvider 실습 - 연락처 조회

  • ContactsActivity 추가
  • Android 시스템이 제공하는 ContactsContract.Contacts.CONTENT_URI를 사용해 연락처 목록을 조회
  • 권한 요청 처리:
    • READ_CONTACTS 권한 선언 및 런타임 요청 구현
  • 런타임 권한 요청 후, 이름을 로그로 출력

2. 커스텀 ContentProvider 구현 - 출고 내역 조회

  • ShipmentContentProvider 구현
    • UriMatcher를 이용해 shipments 목록 및 단일 아이템 URI 구분 처리
    • query, insert, delete, update 기본 CRUD 기능 구현
  • 내부 SQLite 사용을 위한 ShipmentDbHelper 구현
    • 출고 테이블: item_name, quantity, destination, timestamp
  • Manifest<provider> 등록 완료

3. ContentProvider Consumer UI - ShipmentActivity

  • 앱 내부에서 ContentResolver를 통해 ShipmentContentProvider에 접근
  • Jetpack Compose 기반 UI
    • 출고 목록 표시
    • UI에서 DB 직접 접근하지 않고 Activity 레벨에서 리스트로 가공 후 전달 → UI 분리

4. study-content-provider 구조 정리

  • 앱 내부에서 ContentProvider를 외부처럼 접근하는 구조를 설계
    • URI 기반 접근 시뮬레이션
    • 실제 앱 외부에는 노출하지 않음 (exported="false")

학습 목적 & 특징

  • ContentProvider의 기본 구조 및 URI 기반 설계 방식 학습
  • 시스템 Provider와 커스텀 Provider 비교 체험
  • Clean Architecture 관점에서 UI와 DB 접근을 명확히 분리
  • Jetpack Compose 환경에서도 ContentProvider 사용 구조 설계

이후 학습 방향 제안

주제 내용
📁 파일 공유 Provider FileProvider를 활용한 이미지 공유 실습
🔐 보안 설정 exported, permission, grantUriPermission 등 보안 전략
🧱 Room 연동 Room + ContentProvider 조합으로 구조 확장
📦 앱 간 실제 공유 다중 모듈 또는 샘플 외부 앱을 만들어 URI 접근 테스트

sh1mj1 added 7 commits May 22, 2025 15:25
- `shipment.db` 데이터베이스를 추가한다.
- UriMatcher를 사용하여 URI에 따라 다른 작업을 수행한다.
- AUTHORITY와 CONTENT_URI를 정의하여 외부 앱에서 ContentProvider에 접근할 수 있도록 한다.
- 앱 실행 시 `logContacts()`를 호출하여 연락처 정보를 로그로 출력한다.
- `READ_CONTACTS` 권한이 없는 경우 사용자에게 권한을 요청한다.
- 기존 Shipment 데이터가 중복으로 쌓이지 않도록 `insertInitialShipments()` 호출 전에 데이터를 삭제하도록 수정한다.
- `ContactsActivity`를 추가하여 기기의 연락처 정보를 읽어와 화면에 표시
  - `READ_CONTACTS` 권한 요청 및 처리 로직 구현
  - `ContentResolver`를 사용하여 `ContactsContract`에서 연락처 이름과 전화번호 조회
- 기존 `ShipmentActivity`에서 연락처 관련 로직 제거
@sh1mj1 sh1mj1 merged commit 75ee66a into dev May 22, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant