ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 콘텐츠 제공자 Content providers
    Android 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 rows

     

     

     

     

    Cursor 클래스 주요 메소드

    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 ContentProvider

     

    2. 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 메소드 오버라이드

     

     


     

     

    데이터 가져오기

     

     

     

     

     

     

     

     

Designed by Tistory.