초보자를위한 Android 자습서 4 부 : 콘텐츠 제공 업체



이 Android 자습서에서는 콘텐츠 공급자 개념에 대해 설명합니다. Android 시스템에서 데이터 교환을 용이하게하는 Android의 중요한 빌딩 블록입니다.

초보자를위한 이전 Android 자습서에서 Android의 처음 세 가지 구성 요소에 대해 논의했습니다. 활동 , 의지 서비스 . 이 기사는 초보자를위한이 일련의 Android 자습서 중 네 번째이며 Android 시스템의 또 다른 매우 중요한 구성 요소 인 콘텐츠 공급자에 대해 설명합니다.

콘텐츠 제공자는 Android 시스템의 중개자로서 여러 Android 애플리케이션 간의 데이터 교환을 용이하게합니다. 이 Android 튜토리얼에서 자세한 내용을 살펴 보겠습니다.





초보자를위한 Android 튜토리얼 -4 보너스 : 여기에서 콘텐츠 제공자 코드 다운로드 . 튜토리얼을 마치면이 코드를 원할 것입니다! :)

[dl url =”#”class =”eModal eModal-6 ″ title =”다운로드 코드”desc =””type =””align =””for =”download”]



Android 자습서 : 콘텐츠 제공자

Content Provider는 중앙 데이터 저장소 또는웨어 하우스에 대한 액세스를 용이하게하여 서로 다른 애플리케이션에서 데이터를 공유하고 데이터를 조작 할 수 있도록합니다.

다음은 Android 시스템 API에있는 기본 콘텐츠 제공 업체의 몇 가지 예입니다.

Android 자습서 : Android 시스템의 기본 콘텐츠 공급자



이러한 콘텐츠 공급자는 기본 데이터베이스에서 사용자를 추상화 할 수 있습니다. 일반적으로 콘텐츠 공급자는 SQLite를 사용하여 기본 데이터베이스를 저장합니다.

이전 Android 자습서에서도 작업을 단순화하는 데 도움이 된 좋은 오래된 Facebook 애플리케이션의 항상 유용한 예를 살펴 보겠습니다!

여러분 모두는 소셜 네트워킹 생활의 어느 시점에서 페이스 북 타임 라인에 사진을 업로드했습니다. 어떻게하나요?

벽에있는 사진 버튼을 클릭하면 사진 갤러리로 이동합니다. 여기에서 업로드 할 사진을 선택할 수 있습니다.

의 이전 기사를 읽은 후 Android 자습서 시리즈 , 활동 및 의도에 대해 알고 있으므로 다음과 같은 일이 발생한다는 것을 알고 있습니다.

r 예제를 통한 머신 러닝

귀하의 Facebook 담벼락은 '활동'입니다. 사진 버튼을 클릭하면 메시지를 전달하는 'INTENT'가 전달되고 'CONTENT PROVIDER'(포토 갤러리)가 열립니다. 사진은 네트워크 업로드“SERVICE”를 사용하여 업로드됩니다.

이 라이브 비디오를 시청하여 콘텐츠 제공자가 Facebook 애플리케이션 내에서 어떻게 작동하는지 알아보십시오.

Android 시스템에 콘텐츠 제공자가 필요한 이유는 무엇입니까?

한 응용 프로그램에서 생성 된 데이터베이스가 두 번째 응용 프로그램에 표시되지 않기 때문에 콘텐츠 제공자가 필요합니다.

SQLite를 사용하여 다른 응용 프로그램에서 데이터베이스를 만들고 저장하는 것은 간단하지만 문제는 이것입니다. Android의 데이터베이스는이를 생성하는 애플리케이션 전용입니다. . Android에는 모든 애플리케이션이 액세스 할 수있는 공통 저장 영역이 없습니다. 따라서 서로 다른 응용 프로그램에서 데이터베이스를 사용하려면 Android 시스템에 이러한 응용 프로그램 간 및 프로세스 간 데이터 교환을 허용하는 인터페이스가 필요합니다. 콘텐츠 제공자가 플레이하는 곳입니다.

콘텐츠 제공자가 정말로 필요합니까?

1) 당신 개인 데이터베이스를 원한다면 자체 공급자를 개발할 필요가 없습니다. 특정 응용 프로그램의 경우 (이 데이터베이스는 데이터베이스를 만든 응용 프로그램 이외의 다른 응용 프로그램에서 액세스 할 수 없습니다).

2) 그러나 당신 사용자 지정 검색 제안을 제공하려면 사용자 지정 공급자가 필요합니다. 자신의 응용 시스템에서.

3) 콘텐츠 제공자가 필요합니다. 응용 프로그램에서 다른 응용 프로그램으로 복잡한 데이터를 복사하여 붙여 넣습니다.

콘텐츠 제공자가 지원하는 작업은 무엇입니까?

콘텐츠 제공 업체는 다음과 같은 기본 작업을 지원합니다.

하나) 쿼리 : 지정된 URI를 기반으로 모든 개체에 대해 콘텐츠 공급자를 쿼리합니다.

2) 지우다: 콘텐츠 제공자의 데이터베이스에서 지정된 개체를 삭제합니다.

삼) 최신 정보: 데이터베이스의 개체를 업데이트합니다.

4) 끼워 넣다: 데이터베이스에 새 개체를 삽입합니다.

콘텐츠 제공자에서 작업을 수행하는 단계

1 단계 : 콘텐츠 제공 업체에 액세스

ContentResolver 클라이언트 객체 콘텐츠 제공자의 데이터에 액세스하는 데 사용됩니다. 공급자 개체와 통신하여 데이터 액세스 요청을 수락하고 원하는 결과를 반환합니다. 공급자 및 공급자 클라이언트 개체에서 제공하는 데이터 교환 인터페이스를 통해 서로 다른 프로세스 / 응용 프로그램간에 통신 할 수 있습니다.

데이터베이스에 액세스해야하는 애플리케이션은이를 선언하고 매니페스트 파일에서 권한을 요청해야합니다. 이에 대해서는 후속 Android 자습서에서 자세히 설명합니다.

자바 날짜로 문자열 구문 분석

콘텐츠 URI

콘텐츠 URI는 공급자의 데이터를 식별하는 데 사용되는 인수 중 하나입니다. 네 부분으로 구성됩니다.

하나) 계획: 컨텐츠 제공자에 대한 체계는“content”라는 상수 값을 갖습니다.

2) 권위: 공급자의 상징적 인 이름이며 각 공급자에 대해 고유합니다. 이것이 우리가 수많은 목록에서 원하는 콘텐츠 제공자를 선별하는 방법입니다.

삼) 통로: 통로 전체 데이터베이스에서 필요한 데이터를 구별하는 데 도움이됩니다. . 예를 들어 통화 기록 콘텐츠 제공자는 다른 경로를 사용하여 부재중 전화, 수신 전화 등을 구분합니다.

4) 신분증: 필수 구성 요소가 아니며 URI에 없을 수 있지만있는 경우 숫자 여야합니다. 예를 들어 미디어 콘텐츠 제공 업체에서 특정 음악 파일에 액세스하려면 ID도 지정해야합니다. .

과정

제공자 권한을 사용하여 ContentResolver는 올바른 컨텐츠 제공자를 식별합니다 (권한은 각 컨텐츠 제공자마다 고유하므로). 그런 다음 URI의 경로 구성 요소를 사용하여 올바른 (요청 된) 데이터 테이블을 선택합니다. ID가있는 경우 공급자는 요청 된 정확한 데이터를 알 수 있습니다.

URI에는 두 가지 유형이 있습니다.

또한 URI에는 제한 정보도있을 수 있습니다.

2 단계 : 콘텐츠 제공 업체에서 데이터를 검색하는 방법

ContentResolver가 현재 데이터 테이블에 액세스 할 수 있지만 응용 프로그램에 다음 권한이 없으면 필요한 데이터를 검색 할 수 없습니다. '읽기 액세스 권한' 특정 공급자를 위해. 이 권한은 각 콘텐츠 제공 업체의 매니페스트 파일에 정의되어 있습니다.

모든 응용 프로그램 (이 데이터베이스에 액세스하려는 경우) 이 권한을 요청하는 것입니다.

이제이 Android 튜토리얼의 앞부분에서 논의했듯이 콘텐츠 제공자를 사용하여 4 가지 작업을 수행 할 수 있습니다. . 우리는 하나씩 살펴볼 것입니다.

파이썬에서 숫자를 이진수로 변환하는 방법

쿼리

이제 공급자에 액세스했으며 공급자로부터 데이터를 검색 할 수있는 권한이 있습니다. 다음 단계는 공급자에게 필요한 작업을 요청하는 쿼리 구성 .

쿼리하는 동안 사용되는 인수는 다음과 같습니다.

하나) 미움 : 위에서 설명한대로 정확하게 작동합니다.

2) 투사: 쿼리는 전체 데이터베이스 테이블에서 열 집합을 반환합니다. . 이것을 투영이라고합니다. null을 전달하면 모든 열이 반환되므로 비효율적입니다.

삼) 선택 조항 :반환 할 행을 선언하는 필터 , SQL WHERE 절로 형식화됩니다 (WHERE 자체 제외). null을 전달하면 주어진 URI에 대한 모든 행이 반환됩니다.

예를 들어 주소록의 검색 열에 알파벳 (예 : 'P')을 입력하면 'P'로 시작하는 모든 연락처 정보가 반환됩니다. 그러나 검색 창에 아무것도 입력하지 않으면 전체 연락처 목록이 검색됩니다 (이 경우 선택 절이 'null'로 설정 됨).

4) 선택 인수 : 선택 항목에 '? s'를 포함 할 수 있으며, 선택 항목에 나타나는 순서대로 selectionArgs의 값으로 대체됩니다.

5) SortOrder : SQL ORDER BY 절 (ORDER BY 자체 제외). null을 전달하면 정렬되지 않은 결과를 가져옵니다.

쿼리 코드 예 :

  • 연락처에서 전화 번호 검색
커서 커서 = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = ''while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = Integer.parseInt (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {커서 phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID + '=?' , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = '이름 :'+ 이름 + ', 전화 번호 :'+ phoneNo + ''} phoneCursor.close ()}}}

삽입

주소록에 새 연락처를 삽입한다고 가정 해 보겠습니다. ContentValues ​​객체 이러한 삽입을 수행하는 데 사용됩니다. 이를 위해 ContentValue 개체 키와 콘텐츠 공급자 열이 일치해야합니다. 이에 대한 예는 다음과 같습니다.

삽입 코드 예 :

  • 작업은 이름이 'Rajnikant'이고 번호가 '9988999888'인 새 항목을 삽입하는 것입니다.
// 연산 ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCOUNT_NAME, null) .build ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue (StructuredName.DISPLAY_NAME,“Rajnikant”). build (StructuredName.DISPLAY_NAME,“Rajnikant ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUMBER,“9988999888”) .withValue (Phone.TYPE , Phone.TYPE_MOBILE) .build ()) getContentResolver (). applyBatch (ContactsContract.AUTHORITY, ops)

업데이트 중

컨텐츠 제공자를 업데이트하기 위해 다음 인수가 사용됩니다.

하나) 미움: 콘텐츠 제공자의 URI

2) ContentValues ​​: 여기에는 기존 데이터를 대체 할 값이 포함됩니다.

삼) 선택 조항 : 업데이트 할 특정 레코드를 선택하는 데 도움이 될 수 있습니다.

4) 선택 인수 : 선택 항목에 '? s'를 포함 할 수 있으며, 선택 항목에 나타나는 순서대로 selectionArgs의 값으로 대체됩니다.

다시 한 번 ContentValues ​​개체의 키는 콘텐츠 공급자의 열과 일치해야합니다. 그렇지 않으면 업데이트가 발생하지 않습니다.

업데이트를위한 코드 예 :

  • 이름이 'Rajnikant'인 전화 번호 업데이트
문자열 여기서 = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] { 'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (where, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER,“9876543210”) .build ()) getContentResolver (). applyBatch (ContactsContract.AUTHORITY, ops)

삭제

삭제는 ContentValues ​​인수를 제외하고 업데이트와 동일한 인수를 사용하며, 이는 대체 값이 없기 때문에 필요하지 않습니다.

삭제 코드 예 :

  • 이름이 'Rajnikant'인 연락처 삭제
문자열 여기서 = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

삽입 작업의 경우 URI는 디렉터리 기반이어야합니다. 다른 모든 경우에 URI는 ID 기반이거나 디렉토리 기반 일 수 있습니다.

우리는 바랍니다 초보자를위한 Android 튜토리얼 : 5 부 이해하기 어렵지 않았습니다! 후속 Android 자습서에서 콘텐츠 제공 업체에 대해 자세히 논의 할 것입니다. 그때까지 기본 학습을 즐기십시오!

이 Android 튜토리얼에 의문이 있습니까? 저희에게 물어보세요.

행복한 학습!

이 Android 자습서를 만드는 데 다음 리소스가 사용되었습니다! 공식 Android 개발자 , Edureka.in

다음과 같은 관련 게시물을 좋아할 수도 있습니다.