< 개발 환경 > < 프로젝트 적용 > |
안드로이드/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()");
List reqValue = 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값 셋팅 하기
List authValues = 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 |
|---|
TestContentProviderDataA.zip