Android学习笔记七之ContentProvider
更新时间:2023-09-12 09:27:01 阅读量: 综合文库 文档下载
- android开发学习网推荐度:
- 相关推荐
Android学习笔记七之ContentProvider
ContentProvicer简介
Content provider,即是内容提供者或者内容提供商。ContentProvider生命周期
应用安装完成,就会创建完成,手机开机后,第一次被访问时,被创建
只要创建了,只要手机没关机,就会一直存在,类似于在注册表里注册一样 手机关机,才会消失
应用里的数据都可以提供访问.不一定是数据库,在方法里自已定义就可以,但通常是访问数据库 作用
ContentProvider用于不同进程之间传递数据,这也是官方推荐的方式。
当我们想要在自己的应用中访问别的应用的数据,比如获取手机联系人,手机短信等的时候,就需要用到ContentProvider了
当我们自己的应用,需要把自己的一些数据给其它应用进行操作,我们就可以用到contentprovider了。
简单的说,就是Contentprovider为不同应用之间数据共享提供统一的接口。ContentProvider使用表的形式组织数据,所以提供的方法跟表的操作类似,ContentProvider提供如下的方法:
query:查询数据 insert:插入数据 update:更新数据 delete:删除数据
getType:得到数据类型
onCreate:创建数据时调用的回调函数
使用ContentProvider需要一个uri,例如获取手机联系人的uri: content://com.Android.contacts/data/phones
URI解析如下图所示
使用系统提供的ContentProvider
很多时候我们都是使用系统提供的ContentProvider,使用ContentResolver来读取其他应用
的信息,例如读取系统APP,短信,联系人, 手机相册等!例如,我们读取手机联系人
读取手机联系人
package com.example.contentprovider;
import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity; import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getContacts(); }
private void getContacts() {
ContentResolver contentResolver = this.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; System.out.println(\
Cursor cursor = contentResolver.query(uri, null, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println(\ System.out.println(\联系人:\ System.out.println(\电话号码:\
}
cursor.close(); } }
获取手机联系人需要用到系统权限,所以需要在AndroidManifest.xml文件中注册:
这样就可以实现简单的读取手机联系人的效果,下面介绍自定义ContentProvider. 自定义ContentProvider 自定义ContentProvider的步骤如下: 在想要进行数据分享的APP中,创建一个继承ContentProvider的类 实现对应的方法,按照需要进行重写,方法有onCreate()只执行一次,初始化ContentProvider,insert(),delete(),update(),query(),getType()获取ContentProvider数据的MIME类型 在AndroidManifest.xml文件中注册自定义的ContentProvider,至少需要三个属性,name,用于指定ContentProvider的全限定类名;authorities,用于匹配ContentProvider的uri;exported,用于指定是否共享数据,true,共享,false,不共享。 使用UriMatcher,完成uri的匹配 在另外的应用中调用getContentProvider()方法获取到Resolver对象,再进行对应的操作 下面进行代码实现: 创建一个继承ContentProvider的类 package com.example.contentprovider; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.support.annotation.Nullable; /** * Created by Devin on 2016/6/17. */ public class MYContentProvicer extends ContentProvider { private static UriMatcher mUriMatcher; private static final String AUTHORITIES = \private static final iwww.sm136.comnt PERSON = 1; private SQLiteDatabaseOpenHelper mOpenHelper; /** * 利用静态代码块初始化UriMatcher * 在UriMatcher中包含了多个Uri,每个Uri代表一种操作 * 当调用UriMatcher.match(Uri uri)方法时就会返回该uri对应的code; */ static { mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); mUriMatcher.addURI(AUTHORITIES, \} /** * 初始化方法,只执行一次,完成对ContentProvider的初始化 * * @return */ @Override public boolean onCreate() { mOpenHelper = new SQLiteDatabaseOpenHelper(this.getContext()); return true; } /** * 查询方法 * * @param uri * @param strings * @param s * @param strings1 * @param s1 * @return */ @Nullable @Override public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { return null; } /** * 获取ContentProvider的MIME类型 * * @param uri * @return */ @Nullable @Override public String getType(Uri uri) { return null; } /** * 插入数据方法 * * @param uri * @param contentValues * @return */ @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { switch (mUriMatcher.match(uri)) { case PERSON: SQLiteDatabase mDataBase = mOpenHelper.getReadableDatabase(); long rowId = mDataBase.insert(\ if (rowId >= 1) { //通知数据已经发生改变 getContext().getContentResolver().notifyChange(uri, null); return ContentUris.withAppendedId(uri, rowId); } break; } return null; } /** * 删除数据的方法 * * @param uri * @param s
正在阅读:
Android学习笔记七之ContentProvider09-12
教务处期末试卷分析报告05-24
2022年_《马克思主义基本原理概论》考试试题及参考答案(三)04-20
2018-2019年高中数学四川高考模拟试题含答案考点及解析09-13
预拌混凝土执行标准11-26
人教版2016年中考英语作文背诵范文06-29
中国在亚洲区域合作中的地位和作用最后01-08
肖绍国《我的伯父鲁迅先生》教学实录07-02
- 清真菜谱
- 我国国民经济和社会发展十二五规划纲要(全文)
- 高三物理机械振动和机械波复习2
- 浙江省公路山岭隧道机械化装备应用指导手册 doc - 图文
- 2018届高三数学文科二轮复习:专题检测(九) 导数的简单应用
- 2015年上海市公务员录用考试《行政职业能力测验》试卷(B类)
- 七年级道德与法制下册
- 大班户外游戏教案
- 病虫害预警 - 图文
- 某养鱼场为了提高经营管理水平
- 汉中市勉县尧柏余热汽机规程 10
- 烹饪试卷
- 事业单位考试公共基础知识专项分类题库训练
- 语文:第2课 走一步,再走一步 课堂导学案(人教版 七上)
- 天汉使用手册
- 人教版小学三年级数学下册教学计划
- 房地产销售管理完全操作手册122页
- 2009年评审通过具有中学高级教师专业技术资格人员名单...
- 《15秋公共关系学》作业1
- 2017最新版监理公司三标一体管理手册
- ContentProvider
- Android
- 笔记
- 学习
- 2016-2017学年第一学期德育处工作计划
- 开展扶贫助学活动方案
- 北师大版六年级数学小升初模拟试卷(五)
- 新人教版春季小学四年级数学下册课课练大全之课后习题 - 图文
- 黄帝内经试题
- 自动化监控系统在水利工程的应用
- 2.4《光的折射》教学设计
- AB料工艺性试验方案
- 露天煤业“雨季三防”应急预案
- 2008-2009(1)安徽工业大学线性代数试卷B卷
- 2015-2016学年度人教版pep小学六年级英语上册第六单元测试卷 - 图文
- 三月花大酒店保安部管理手册
- Dnntytx托福词汇――熟词辟义表
- 初中学业水平考试-生物 - 图文
- 浅谈电视对儿童的影响
- 衡水金卷2018届高三5月全国大联考文综地理试题含答案
- 牛津英语必修2 unit2 语法详解与练习
- 仪器分析习题
- 吉林省2016年期货从业资格:股指期货投机与套利交易考试题
- 理论力学试卷及答案-B