ContentProvider
ContentProvider实际上可以理解为是一个数据管道
一、为什么要有ContentProvider
1.我们之前的存储都是在具体应用程序下面(具体的私有路径,限制访问权限),如何能够共享呢?
2.系统由于安全的因素,提供的一些数据访问,不能直接开放给开发者,如何让开发者能够访问到这些数据呢?
3.如果我与好的数据库程序,希望封装并且提供一套公共标准,让外部调用而不是直接操作我的数据库,如何做呢?
二、ContentProvider是什么?
1.ContentProvider是一套存储访问数据的通信,让你无需了解下面的存储细节实现数据操作及共享
2.无论具体存储如何的,存在哪儿的,但对外提供的模型是统一的。(ContentProvider实际上是个管道)
3.定义了ContentProvider对象,会在系统初始化的时候自动实例化,无需我们手动实例化对象
4.我们只需要通过ContentProvider对象去取数据和操作数据即可。
三、ContentResolver与ContentProvider配对
四、Uri
content://com.example.transportationprovider/trains/122
前缀:content://
权限:com.example.transportationprovider
数据路径:trains
id: 122
五:定义
1.写一个类继承自ContentProvider,实现方法
2.在AndroidManifest.xml中注册ContentProvider
3.使用ContentResolver调用
4.如果需要另一个进程访问,需要在注册的时候加上android:exported="true"
六:例子
1.继承
package com.douzi.contentpovidersimple;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
if (uri.getAuthority().equals("com.douzi.mycontentprovider")){
Log.i("douzi", "查询数据");
}
return null;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
}
2.注册
<provider android:name=".MyContentProvider" android:authorities="com.douzi.mycontentprovider" android:exported="true"/>
3.调用
getContentResolver().query(Uri.parse("content://com.douzi.mycontentprovider"), null, null, null, null);
- Android中SQLite以及ContentProvider自我学习、理解、失败之总结
- ContentProvider
- Android之ContentProvider(二):Uri对象的内容URI
- 基础总结篇之七:ContentProvider之读写短消息
- 使用ContentProvider管理多媒体内容
- Android四大组件之ContentProvider(上)
- contentProvider
- android四大组件--ContentProvider详解
- SQLite轻量级数据库--ContentProvider
- ContentProvider和Uri详解
- ContentProvider初步
- Android四大组件之ContentProvider获取系统的联系人及联系人电话
- ContentProvider之手机号码查询
- 10min了解ContentProvider
- ContentProvider自定义-笔记
- ContentProvider、AsyncTaskLoader
- Android ContentProvider和Uri详解
- ContentProvider初体验
- android 内容提供者(ContentProvider)共享SQLite
- ContentProvider android:exported="true"