< 개발 환경 > < 프로젝트 적용 > |
안드로이드/Android 컨텐트 프로바이더(ContentProvider) 사용법 1 - data -
이번 포스팅에서는 컨텐프 프로바이더(Content Provider) Data 사용법에 대해서 알아 보겠습니다. DB 작업은 다음 포스팅에서 설명 하도록 하고 이번에는 간단하게 ContentProvider에 접근해 인증키를 가져오는 예제를 설명해 보겠습니다. 자 그럼 시작해 보겠습니다.
우선 저번 시간에 보았던 ContentProvider의 기본적인 동작 원리 입니다.
1. ContentProvider 를 구현한 어플리케이션 |
Auth_key를 만들고 ContentProvider를 통해 공유하는 방법으로 만들어 졌습니다. 실제 개발에서는 Auth_key 를 관리하면서 진행해 주시면 됩니다.
AndroidManifest.xml 파일 입니다.
DataProvider.java 파일 입니다.
package arabiannight.tistory.com.contentproviderdataa.provider; import java.util.List; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.util.Log; /** * ContentProvider Class */ public class DataProvider extends ContentProvider{ public static final String AUTHORITY = "arabiannight.tistory.com.contentproviderdataa"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY); private String Auth_key = "K333KAAARABIANUUUU"; public String getAuthkey() { return Auth_key; } public void setAuthkey(String authkey) { Auth_key = authkey; } @Override public String getType(Uri uri) { return null; } /** * ContentProvider 객체가 생성 되면 호출 */ @Override public boolean onCreate() { return false; } @Override public Uri insert(Uri uri, ContentValues values) { Log.d("PROVIDERT", "A_insert()"); ListreqValue = uri.getPathSegments(); if(reqValue.size() > 0) { String serviceType = reqValue.get(0); Log.d("PROVIDERT", "A_serviceType = " + serviceType); if(serviceType.equals("AUTH_GET")){ return Uri.parse(CONTENT_URI + "/" + serviceType + "/" + getAuthkey()); } } return uri; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return null; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.d("PROVIDERT", "A_update()"); List reqValue = uri.getPathSegments(); if(reqValue.size() > 0) { String serviceType = reqValue.get(0); Log.d("PROVIDERT", "A_serviceType = " + serviceType); if(serviceType.equals("AUTH_UPDATE")){ String new_authkey = values.getAsString("new_authkey"); Log.i("PROVIDERT", "update() new_authkey = " + new_authkey); setAuthkey(new_authkey); } } return 0; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } } //
2. ContentProvider를 Call(요청) 하는 어플리케이션 |
ContentProvider에 접근하기 위해서는 "content://AUTHORITY" 를 사용해서 접근 하시면 됩니다. "content://" 는 웹페이지 접속 할때 사용하는 "http://address.com" 의 "http://" 형식 처럼 안드로이드에서 ContentProvider 에 접근할 때 사용하는 규약 이라고 생각 하시면 됩니다.
AUTHORITY = ContentProvider를 구현한 어플리케이션 AndroidManifest.xml 파일에 선언한 authorities 와 동일하게 작성해 주면 됩니다.
MainActivity.java 파일 입니다.
package arabiannight.tistory.com.contentproviderdatab; import java.util.List; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; /** * ContentProvider Call Activity */ public class MainActivity extends Activity { public static final String AUTHORITY = "arabiannight.tistory.com.contentproviderdataa"; /** ContentProvider 제공 클래스에서 받을 uri.getPathSegments()를 등록해 준다 * << content://" + AUTHORITY + PATH_GET>> 다음부터 getPathSegments[0] = PATH_GET, * [1], [2], [3]... 순으로 나간다. */ public static final String PATH_GET = "/AUTH_GET"; public static final String PATH_UPDATE = "/AUTH_UPDATE"; /** CotentProvider 접근을 위한 ContentResolver 객체를 생성할 때 넣어 주는 매개변수에 * URI를 사용 한다. */ public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + PATH_GET); public static final Uri CONTENT_URI2 = Uri.parse("content://" + AUTHORITY + PATH_UPDATE); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setLayout(); } public void onClick(View v) { switch (v.getId()) { case R.id.bt_get: Log.i("PROVIDERT", "B Click Auth get Button!"); // ContentResolver 객체 얻어 오기 ContentResolver cr = getContentResolver(); // ContentProviderDataA 어플리케이션 insert() 메서드에 접근 Uri uri = cr.insert(CONTENT_URI, new ContentValues()); // ContentProviderDataA 어플리케이션 에서 리턴받은 Data값 셋팅 하기 ListauthValues = uri.getPathSegments(); String serviceType = authValues.get(0); String authkey = authValues.get(1); Log.i("PROVIDERT", "B_Return_serviceType = " + serviceType); Log.i("PROVIDERT", "B_Return_authkey = " + authkey); tv_Content.setText("A 어플리케이션에서 받아온 인증키 : " + authkey); break; case R.id.bt_update: // ContentResolver 객체 얻어 오기 ContentResolver cr2 = getContentResolver(); // ContentValuse를 사용한 Data 전달하기 ContentValues cv = new ContentValues(); cv.put("new_authkey", "SECONDeww33000aaacccxx"); // ContentProviderDataA 어플리케이션 update() 메서드에 접근 cr2.update(CONTENT_URI2, cv, null, null); break; default: break; } } /** * Layout */ private TextView tv_Content; private void setLayout() { tv_Content = (TextView) findViewById(R.id.tv_content); } } //
3. A 와 B 어플리케이션 사이에서의 Data 공유를 도와주는 ContentResolver |
기본적으로 Data공유를 위해서는 insert() 메서드만 가지고 공유작업을 진행할 수 있습니다. 위의 예제에서 update() 메서드에 구현된 작업을 insert() 메서드에 대신 해줘도 상관 없습니다. 자 그럼 이렇게 해서 기본적인 Data 공유에 대해 알아 봤습니다. 다음 포스팅에서는 DB를 활용한 ContentProvider 구현에 대해 알아 보도록 하겠습니다.
파일첨부 :
스크린샷 :
감사합니다.
'Android > ContentProvider' 카테고리의 다른 글
안드로이드/Android 컨텐트 프로바이버(ContentProvider) 란? (0) | 2013.01.08 |
---|