Notice
Recent Posts
Recent Comments
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

c

YouTube DATA API (3) - Android ContentProvider 본문

Google/YouTube

YouTube DATA API (3) - Android ContentProvider

iuChannel 2013. 1. 17. 15:57


아래 글 YouTube DATA API (1) 을 토대로 Android ContentProvider 를 만들어 봤습니다.


Android 용 Library 와 Source 는 아래에서 확인하실 수 있습니다.

http://code.google.com/p/android-provider-for-google-api/


Sample Project 에서는 이를 이용한 예제를 보여 줍니다.

http://code.google.com/p/android-provider-for-google-api/source/browse/#svn%2Ftrunk%2FAndroidProviderSample


사용방법은 간단합니다.

1. jar 파일 다운로드

http://code.google.com/p/android-provider-for-google-api/downloads/detail?ame=androidprovider4googleopenapi.jar&can=2&q=#makechanges


2. AndroidManifest.xml 파일에 아래 코드 추가

<provider
android:name="com.iuchannel.android.provider.YouTubeProvider"
android:authorities="(PackageName).YouTubeProvider" android:grantUriPermissions="true" />


3. 아래와 같은 Uri 로 query 를 하면 결과값을 Cursor 로 받을 수 있다.

public class MainActivity extends ListActivity {
        private final static String USER_NAME="MBCClassic";
        ListView mListView;
       
SimpleCursorAdapter mAdapter;
       
AsyncQueryHandler mHandler;     
       
Uri mUri;
       
       
@Override
       
protected void onCreate(Bundle savedInstanceState) {
               
super.onCreate(savedInstanceState);
                setContentView
(R.layout.activity_main);
                mUri
=Uri.parse("content://"+getPackageName()+".YouTubeProvider/user/"+USER_NAME);
                mListView
=getListView();
               
                mAdapter
=new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null,
                               
new String[]{"title"},
                               
new int[]{android.R.id.text1},
                               
SimpleCursorAdapter.NO_SELECTION){
                       
               
};
               
                mListView
.setAdapter(mAdapter);
                mHandler
=new AsyncQueryHandler(getContentResolver()){
                       
@Override
                       
protected void
                        onQueryComplete
(int token, Object cookie, Cursor cursor){
                               
Log.d("Test", "onQueryComplete");
                               
if(cursor==null){
                                       
Log.d("Test", "Cursor=null");
                               
}
                               
                               
if(cursor!=null && cursor.getCount()>0){
                                       
Log.d("Test", "Cursor>0");
                                        mAdapter
.swapCursor(cursor);
                                        mListView
.invalidateViews();
                               
}
                       
};
               
};               
                mHandler
.startQuery(0, null, mUri, null, null, null, null);
       
}

}


Cursor 에 넘겨주는 값들은 Const.java 에 정의 되어 있으며 아래와 같습니다.

                public final static String PRJ_ID="_id";
                public final static String PRJ_TITLE="title";
                public final static String PRJ_PLAYLIST_ID="id";
                public final static String PRJ_DESCRIPTION="description";
                public final static String PRJ_SIZE="size";
                public final static String PRJ_SQDEFAULT="sqDefault";
                public final static String PRJ_HQDEFAULT="hqDefault";
                public final static String PRJ_AUTHOR="author";
                public final static String PRJ_CREATED="created";
                public final static String PRJ_UPDATED="updated";

             

                public final static String[] USER_PLAYLIST={
                                PRJ_ID,
                                PRJ_PLAYLIST_ID,
                                PRJ_CREATED,
                                PRJ_UPDATED,
                                PRJ_AUTHOR,
                                PRJ_TITLE,
                                PRJ_DESCRIPTION,
                                PRJ_SIZE,
                                PRJ_SQDEFAULT,
                                PRJ_HQDEFAULT,
                };



아래 그림은 위의 간단한 코드로 나온 결과값입니다. 오른쪽그림은 YouTube 사이트에서 보이는 화면이구요.

위 코드에서는 Adapter 에서 title 만을 UI 에 뿌려주었기 때문에, 이와 같이 보이는 것이구요.

PRJ_SIZE, PRJ_UPDATED, PRJ_SQDEFAULT 와 같은 정보들도 같이 뿌려주면 사이트와 거의 동일한 화면을 구성할 수 있습니다.