一、内容提供者的创建(ContentProvider)

  1. URI的组成:Uri由scheme、authorities、path三部分组成。scheme是标准前缀,表明数据被ContentProvider控制,不会被修改;authorities主要用来区分不同的应用程序,为避免冲突,会采用程序包名的方式进行命名;path部分代表资源或数据,当访问者操纵不同的数据时,此部分可以动态改变。

Uri:content://cn.itcast.mycontentprovider/person

  1. 内容提供者的创建:

    1. public class MyContentProvider extends ContentProvider{//继承ContentProvider抽象类
    2. public MyContentProvider(){}
    3. public int delete(Uri uri, String selection, String[] selectionArgs){}
    4. public String getType(Uri uri){}//用于返回指定Uri代表的数据的MIME类型,
    5. //例如Windows系统中txt文件和.jpg文件就是两种不同的MIME类型
    6. public Uri insert(Uri uri, ContentValues values){}
    7. public boolean onCreate(){//内容提供者创建时调用
    8. return false;
    9. }
    10. public Cursor query(Uri uri, String[] projection, String selection,
    11. String[] selectionArgs, String sortOrder){}
    12. public int update(Uri uri, ContentValues values, String selection,
    13. String[] selectionArgs){}
    14. }
  2. 内容提供者创建完成后自动在AndroidManifest.xml中对内容提供者进行注册。

    1. <provider
    2. andriod:name".MyContentProvider"
    3. andriod:authorities="cn.itcast.mycontentprovider"
    4. andriod:enabled="true"
    5. andriod:exported="true">
    6. </provider>

    二、内容提供者的使用(ContentResolver)

    应用程序通过ContentProvider共享数据,通过ContentResolver对共享的数据进行操作。

    1. //1.获取相应操作的Uri
    2. Uri uri = Uri.parse("content://cn.itcast.mycontentprovider/person");
    3. //将字符串转化为Uri对象
    4. //2.获取到ContentResolver对象
    5. ContentResolver resolver = context.getContentResolver();
    6. //3.通过ContentResolver对象查询数据
    7. Cursor cursor = resolver.query(uri,
    8. new String[] {"address", "data", "type", "body", },
    9. null, null, null );
    10. while(Cursor.moveToNext()){
    11. String address = cursor.getString(0);
    12. long date = cursor.getLong(1);
    13. int type = cursor.getInt(2);
    14. String body = cursor.getString(3);
    15. }
    16. cursor.close();//别忘关闭,否则会内存泄漏

    UriMatcher的常用方法(重要)
    该辅助工具类用于匹配Uri

  3. public UriMatcher(int code);创建UriMatcher对象时调用,参数使用UriMatcher.NO_MATCH表示路径不满足条件返回-1

  4. public addURI(String authority, String path, int code);

添加一组匹配规则,authority即Uri的authorities部分,path即Uri的path部分,code即Uri匹配后返回的匹配码

  1. public int match(Uri uri);

匹配Uri,与addURI()方法相对应,匹配成功则返回addURI()方法中传入的参数code的值

三、内容观察者的使用(ContentObserver)

通过ContentObserver实时监听ContentProvider共享的数据是否发生变化。