-
콘텐츠 제공자 Content providersAndroid 2019. 7. 9. 13:25
콘텐츠 제공자
https://developer.android.com/guide/topics/providers/content-providers?hl=ko
안드로이드 4가지 구성요소 중 하나
콘텐츠 제공자 개념
- 앱 데이터를 다른 앱과 공유하고싶을때 사용
- ContentProvider 클래스로 구현
- 다른앱의 제공자 접근은 ContentResolver 클래스로
- 접근시 AndroidManifest 에서 <uses-permission> 설정을 통해 해당 제공자 권한 획득필요
*안드로이드는 기존에 오디오, 동영상, 이미지, 연락처 등의 콘텐츠 제공자가 있음
android.provider 패키지 참고
ContentProvider : 서버 : 데이터 제공
ContentResolver : 클라이언트 : 데이터 접근
통신은 Contract 라는 포맷에 맞춤
서로다른 앱에 있는 ContentProvider 객체와 ContentResolver 객체가 자동으로 프로세스간 통신을 처리함
제공자 메소드
제공자는 각 CRUD 기능에 대한 메소드 오버라이드
create : insert()
read : query()
update : update()
delete : delete()
관리되는 데이터는 테이블 형태로 표시됨
ContentResolver 클래스로 다른앱 데이터 가져오기
데이터는 Contract 규약을 통해 가져옴
query()는 해당하는 행들을 Cursor 객체로 반환
Cursor객체에 행 목록이 담김
CRUD 메소드
검색 : query()
query(Uri,projection,selection,selectionArgs,sortOrder)URI, 열검색조건, 행검색조건, ?자리 표시자 대체값, 정렬방식
URI
제공자의 상직적인 이름(제공자 권한)
테이블 이름(경로)
content://경로/테이블이름ContentResolver 는 URI의 권한을 파싱
제공자 확인
테이블 4번째 행에 접근하려면
Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);// Queries the user dictionary and returns results mCursor = getContentResolver().query( UserDictionary.Words.CONTENT_URI, // The content URI of the words table mProjection, // The columns to return for each row mSelectionClause // Selection criteria mSelectionArgs, // Selection criteria mSortOrder); // The sort order for the returned rowsCursor 클래스 주요 메소드
row 이동
moveToFirse()
moveToNext()
값 가져옴
getColumnIndex()
String 으로 가져옴
getString()
ContentProvider 클래스로 내 앱 데이터 공유하기
콘텐츠 제공자 생성
https://developer.android.com/guide/topics/providers/content-provider-creating.html?hl=ko
데이터 공유하기
단계
1. ContentProvider 클래스 상속
public class MyContentProvider extends ContentProvider2. AndroidManifest 에 <provider> 등록
<provider android:authorities="" android:name=".해당클래스이름" android:exported="true"/>*android:exported="false" 이면 다른 앱에서 접근불가
3. Contract 정의
public class MyContract { public static final String AUTHORITY = "com.rimduhui.contentprovidertutorial"; public static final String ID = "#"; public static final String BASE_PATHS = "test"; public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY); public static final Uri BASE_PATH_URI = BASE_URI.buildUpon().appendPath(BASE_PATHS).build(); public static final int TESTS = 100; public static final int TEST_BY_ID = 101; public static final UriMatcher TestUriMatcher = buildUriMatcher(); private static Uri buildIdPath() { return BASE_PATH_URI.buildUpon().appendPath(ID).build(); } }4. query()와 각 CRUD 메소드 오버라이드
데이터 가져오기
'Android' 카테고리의 다른 글
Android WebView mixed content 허용하기( 안드로이드 웹뷰 엑박 문제) (0) 2020.10.25 [Android/Java] 알림, 특정주기 알림, 반복 알람 만들기 (0) 2020.10.04 브로드캐스트 수신자 Broadcast Receiver (0) 2019.07.09 서비스 Service (0) 2019.07.03 안드로이드 매니페스트 (AndroidManifest.xml) (0) 2019.07.03