Android 使用ContentProvider在应用间共享数据
在开发的过程中,有时会有需求要实现应用程序之间实现数据共享,在Android
系统中提供了一个内容提供者ContentProvider
可以实现这个功能,需要继承这个类,并实现相关的接口,其他的应用就可以通过uri来访问相关的数据,在Android
中最常见的
内容提供者就是MediaProvider
,所有的应用都可以通过uri来访问系统中的媒体数据,我们也可以实现这样的功能,首先就是要
确定你的应用是否要向外提供数据
设计数据存储
我们这里是通过数据库最为媒介来提供数据,需要设计具体的数据库的数据结构,通过系统提供的SQLiteOpenHelper
类来创建数据库
核心的代码:
简单的数据结构,根据自己的需求设计数据库的数据结构
|
|
继承SQLiteOpenHelper
来创建数据库
|
|
内容提供者
ContentProvider
需重载的接口如下:
- public Uri insert(Uri uri, ContentValues values)
- public int delete(Uri uri, String selection, String[] selectionArgs)
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
public String getType(Uri uri)
URI的设计
[content://][com.example.demo.gank.provider][/settings][/1]
|—–A—–|—————B—————|—–C—-|–D-|A:是Scheme,固定为
content://
- B: 是Authority,用来识别特定的
Content Provider
,一般使用应用的报名来命名 - C:是资源的路径
D: 资源的ID
为了传入的uri执行不同的操作,可以通过Android中的
UriMatcher
实体类,将uri映射不同的内容
设置权限
可以为provider设置权限
|
|
运行工程,这个工程应用是A,A应用安装之后,这个应用就是一个内容提供者
再建一个工程B,在B中访问数据,这个是工程B中访问数据库的代码
|
|
在B中的AndroidManifest.xml'
中加入相关的权限
|
|
运行结果就是得到A中数据库的内容
代码
核心的逻辑代码,具体的代码请参考源码 工程源码
Settings.java
SettingsProvider.java
|
|