内容提供器

如果想要实现跨程序共享数据的功能,官方建议使用内容提供器,接下来就是内容提供器的用法。

在这之前,先了解一下URI的写法:
协议声明+authority+path
例如:
content://com.example.app.provider/table1
其中authority为com.example.app.provider
path为table1
以上URI是表示访问table1里面的所有数据,而我们还可以在后面加上id,例如,content://com.example.app.provider/table1/1 表示访问table1中id为1的数据。
可以在id部分使用*,表示匹配任意长度的任意字符,使用#,表示匹配任意长度的数字。

接着回到主题,开始我们的内容提供器的学习。
首先自己创建一个内容提供器,让其继承自ContentProvider,并重写onCreate(),query(),upData(),delete(),insert(),getType()六个方法。
代码如下:
MyProvider
onCreate()方法在内容提供器初始化时被调用,在这里通常完成对数据库的创建、升级等操作。这样当ContentResolver尝试访问我们程序中的数据时,内容提供器才会被初始化。
qury()方法用来查询数据,使用uri参数来指定查询哪一张表,projection表示查询哪些列,selection和selectionArgs用来约束查询哪些行,sortOrder用来指定排序的方式。最后以Cursor的方式返回。
upData()方法用来更新数据,使用uri参数来指定查询哪一张表,将新的数据保存在values参数中,projection约束更新哪些列,selection和selectionArgs用来约束更新哪些行,返回值为更新的行数。
delete()方法用来删除数据,uri参数指定哪一张表,selection和selectionArgs约束删除哪些行,返回值为删除的行数。
getType()方法根据出入的URI返回相应的MIME类型。
内容提供器用法的基本思路就这么多,接下来就是实践了。