100steps/Blogs

了解ContentProvider

Opened this issue · 0 comments

第一次线上分享~~
ContentProvider为Android四大组件之一,之前并没有使用过,所以趁着这次分享赶紧看看这是什么东东。
问了一下度娘,ContentProvider主要用来应用程序之间的数据共享,一个应用程序用ContentProvider将分享给其他应用访问。google doc说数据可以存储于文件系统、SQLite数据库或其它方式,内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。而ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。     
1.ContentProvider主要方法:
public boolean onCreate() 在创建ContentProvider时调用;
public Cursor query(Uri, String[], String, String[], String) 用于查询指定Uri的ContentProvider,返回一个Cursor;
public Uri insert(Uri, ContentValues) 用于添加数据到指定Uri的ContentProvider中;
public int update(Uri, ContentValues, String, String[]) 用于更新指定Uri的ContentProvider中的数据;
public int delete(Uri, String, String[]) 用于从指定Uri的ContentProvider中删除数据;
public String getType(Uri) 用于返回指定的Uri中的数据的MIME类型;

2..ContentResolver
要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法,主要操作方法有对数据的增删改查。
public Uri insert(Uri uri, ContentValues values) 用于添加数据到指定Uri的ContentProvider中。
public int delete(Uri uri, String selection, String[] selectionArgs) 用于从指定Uri的ContentProvider中删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 用于更新指定Uri的ContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 用于查询指定Uri的ContentProvider。

3.Uri类
例:Uri uri = Uri.parse("content://contacts/people")
Uri由3部分组成。把Uri比作网址,第一部分是"content://",可以看作是网址中的"http://"。第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作是网址中的主机名。第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。
      以下是一些示例URI:
     content://media/internal/images  这个URI将返回设备上存储的所有图片
     content://contacts/people/  这个URI将返回设备上的所有联系人信息
     content://contacts/people/45 这个URI返回单个结果(联系人信息中ID为45的联系人记录)

具体的代码还没有写过。看了网上的几个demo还看得懂,应该不难。总的来说就是应用通过provider使数据暴露出来,然后另一个应用通过resolver来实现对数据的增删改查操作,当然前提是获取了一定权限!