《第一行代码-Android》学习笔记(十三)

来源:互联网 发布:java 获取键盘输入 编辑:程序博客网 时间:2024/06/05 20:47

如何实现自己的content provider

1.创建内容提供器:

a) 编写一个类去继承ContentProvider类,并实现里面的六个方法:

i. onCreate():初始化的时候会调用,只有当存在ContentResolver尝试访问内容提供器的时候它才会被初始化

ii. query():

iii. update():

iv. delete():

v. insert():

vi. getType():更加传入的Uri返回相应的MIME类型。

b) URI格式:

i. content://com.gu.demo.provider/*:表示匹配任意表

ii. content://com.gu.demo.provider/table1/#:表示匹配table1表中任意一行。

最后可以借助UriMatcher这个类进行对不同的Uri分类匹配。

static

       {

        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

        uriMatcher.addURI(AUTHORITY"book"BOOK_DIR);

        uriMatcher.addURI(AUTHORITY"book/#"BOOK_ITEM);

       }

switch(uriMatcher.match(uri))

        {

            case BOOK_DIR :

            cursor = db.query(DBHelper.TABLE_NAME, projection, selection, selectionArgs, nullnullsortOrder);

break;

           case BOOK_ITEM :

            String bookId = uri.getPathSegments().get(1);

            cursor = db.query(DBHelper.TABLE_NAME, projection, "id=?"new String[] { bookId }, nullnull,sortOrder);

            break;

            default:

                break;

     }

c) Content provider项目中的配置文件中需要对provider进行配置:

<provider

                      android:name="com.gu.demo.provider.BookProvider"

                     android:authorities="com.gu.demo.provider"

                     android:exported="true" >

               </provider>

此处会有黄色警告,警告应用数据会因此被外界访问的危险。并且这里的  android:exported="true" 必须要配置,否则外界将无法访问此content provider

d) 在另一个项目中利用contentResolver对象和Uri定位到设计好的content provider中,进行相应的访问。

                           Uri uri = Uri.parse("content://com.gu.demo.provider/book/1");

              Cursor cursor = this.getContentResolver().query(uri, nullnullnullnull);

0 0