为让其他软件能操作自己工程中的数据数据库表,给其他软件提供了访问数据库的同一方式;这种方式就是contentprovider
作用:把应用本身的私有数据提供给其他应用使用。
产生原因:一般应用的私有数据(数据库等)不能被其应用访问,但是如联系人、短信等数据要用第三方APP备份或者读取使用时就有冲突,所以就产生了内容提供者ContentProvider,它向其他的应用提供了访问自己私有数据的方式。关系图如下:
内容提供者给其他软件提供了访问数据库的同一方式
编写内容提供者步骤:
1.写一个类AccountContentProvider,继承了ContentProvider:public class AccountContentProvider extends ContentProvider {};
2.在清单文件中配置内容提供者,添加了provider节点,设置了android:authorities="com.itheima.db.provider.AccountContentProvider",authorities是内容提供者的主机名,就相当于一个网站的域名或者ip,可以根据这uri找到内容提供者;
3.在内容提供者的代码中实现了增删改查的方法;
3.在内容提供者中添加uri的匹配器:
// 注册uri
static {
// 注册uri
// authority:内容提供者的主机名,可以在清单文件中找到
// path:路径路,通常是表名/方法名
// code 匹配码,使用mUrimaMatcher匹配用户传递过来的uri成功时返回这个code,
// 匹配成功使用的uri字符串:content://com.itheima.db.provider.AccountContentProvider/account/insert
mUrimaMatcher.addURI("com.itheima.db.provider.AccountContentProvider",
"account/insert", INSERT_CODE);
mUrimaMatcher.addURI("com.itheima.db.provider.AccountContentProvider",
"account/query", QUERY_CODE);
mUrimaMatcher.addURI("com.itheima.db.provider.AccountContentProvider",
"account/update", UPDATE_CODE);
mUrimaMatcher.addURI("com.itheima.db.provider.AccountContentProvider",
"account/delete", DELETE_CODE);
}
在另一个工程中调运内容提供者:
1.得到系统提供的内容提供者解析器:
ContentResolver resolver = this.getContentResolver();
2.指定内容提供者的uri:
Uri uri = Uri.parse("content://com.itheima.db.provider.AccountContentProvider/account/insert");
3.通过解析器调用内容提供者的insert方法;解析器中的增删改查的方法是与内容提供者中的增删改查方法一一对应的:
resolver.insert(uri, values