Android 四大组件学习之ContentProvider一

ContentProvider作为四大组件之一,那它存在一定是有原因的? 那为什么引用ContentProvider呢?  我们先看一个例子。

大家在生活中用手机,比如你按了360手机管家, 其中360手机管家就有一个短信,通话记录,联系人备份的功能。那手机里的短信,联系人都是存放在数据库中的

比如联系人的信息是存放在contacts2.db中。既然数据是存放在数据库中的,那360手机管家就必须拿到这个数据。但是contac2.db对别的用户是没有权限的。那360是如何拿到手机联系人这些信息呢?

这时候Android系统就引入了ContentProvider。既然第三方程序不能直接操作数据库里的数据,但是第三方可以通过ContentProvider提供的接口去操作数据。所以说ContentProvider的作用就是:就是在不同应用程序之间实现数据的共享。就比如说联系人程序,想把自己的数据共享给别人,但是又不能让别人直接操作,所以联系人程序就通过ContentProvider将自己的数据暴露出来。但是第三方程序想获得该数据,就得必须通过ContentResolver去获得该数据。

那既然访问数据必须通过ContentResolver去访问ContentProvider暴露出来的数据,那ContentResolver是如何知道数据在那里存放的呢?前提是ContentProvider得告诉数据在那里,你去那里取。 这时候及引入另一个人概念Url。

提起URL,大家可能第一想法就是互联网上的URL(统一资源定位符)。此URL是互联网上的URL,而在Android系统中url代表的也是一个地址。但是两者是有区别的:

比如就以百度主页的图片网址为例:

对比看看我们Android中的URL:

既然知道URL是干什么的,那接下来学习URL的一些常用的方法:

1: 将一个字符串转化为URL

Uri uri = Uri.parse("contengt://com.demo.contentprovider/user/1");

2:为url路径加上ID部分

	Uri uri = Uri.parse("content://com.demo.contentprovider/user");
	Uri resUri = ContentUris.withAppendedId(uri, 1);

	/*生成后的uri为: content://com.demo.contentprovider/user/1 */

3:匹配此URl是否合法

	/*构造方法的默认值是返回-1, 代表时不匹配返回-1*/
	UriMatcher matcher = new UriMatcher(-1);

	/*如果匹配为:content://com.demo.contentprovider/user, 就返回为1*/
	matcher.addURI("com.demo.contentprovider", "user", 1);
	/*如果匹配为:content://com.demo.contentprovider/user/2, 就返回为2*/
	matcher.addURI("com.demo.contentprovider", "user/#", 2);//#代表通配符

今天关于ContentProvider以及URL的知识就说到这里

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-30 10:10:54

Android 四大组件学习之ContentProvider一的相关文章

Android 四大组件学习之ContentProvider五

上几节学习了ContentProvider的实际用途,读取短信,插入短信,读取联系人,插入联系人等. 本节课在学习ContentProvider的观察者. 在生活中有第三方的软件,比如什么短信软件,此短信软件是替代了系统中自带的短信软件.当然可读取短信就是利用的ContentProvider,但是此等软件为何能实时的把接受的短信显示出来呢?  这就用到我们的内容观察者. 什么是内容观察者呢?  就是一直在观察系统是否有新短信,如果有新短信就会提示第三方软件赶快去数据库中取短信信息.这样就能实时的

Android 四大组件学习之ContentProvider二

上节学习了什么是ContentProvider.以及ContentProvider的作用.以及什么是URL.本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider 好.实践是检验真理的唯一标准. 那我们就開始行动吧 第一步: 创建一个自己的ContentProvider,我取名为MyContentProvider public class MyContentProvider extends ContentProvider { @Override public int d

Android 四大组件学习之ContentProvider三

上节课学习如何自己创建一个ContentProvider,以及用ContentResolver去操作ContentProvider. 今天我们用系统提供的ContentProvider. 先来个简单的,读取系统的短信内容. 根据上节知道,既然要读取系统的短信,那就得先找到系统的短信在那里? 先找到短信数据库所在的问题,然后导出,查看里面的内容 既然已经分析好了,我们需要什么,不需要什么. 当然还需要知道短信提供者给第三方的URL.这个可以通过Android源码查看. 那我们就写一个程序,读取系统

Android 四大组件学习之ContentProvider四

上节我们学习了怎样去读取系统短信以及插入一条短信到系统中. 本节我们学习怎样获取系统的联系人,以及插入一条联系人 好.废话不多说了,直接操作. 首先和读取短信一样,先找到联系人在数据库中的位置. 然后导出,查看数据库中的内容 上图就是怎样到数据库中找打系统的联系人数据,(看起来图画的有点乱,希望能看懂吧) 既然知道怎样能到系统的数据库找到数据.那我们就開始写代码实现吧: public class ReadContactActivity extends Activity { @Override p

android四大组件学习总结以及各个组件示例(1)

android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个Activity通常就是一个单独的屏幕(窗口). (2)Activity之间通过Intent进行通信. (3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity. (4)Activity生命周期>什么是

Android 四大组件学习之Activity一

Activity是Android四大组件中最基础也是最常用的组件之一.Activity作为一个应用程序组件,提供了一个与用户交互的界面.可以这么说Activity是和用户操作有密切相关的的,常用来负责与用户交互,可以通过setContentView来显示组件. 今天我们学习如何去创建一个Activity 第一步: 创建一个Android Application Project, 填入应用名称,工程名称,包名 点击Next下一步:下面的选择都是默认的. 直到 你就可以选择一个Activity进行创

Android 四大组件学习之BroadcastReceiver一

本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比如在现实社会中,以前每个人家都有一台收音机,这可就可以去接受广播发出来的消息.大家都知道,程序世界也是参照的显示生活设计出来的,那在Android系统中也引入了广播这个概念.那在Android系统中广播有什么作用呢? 举个例子:比如你正在玩游戏或者看视频突然手机电量过低,这时候就会弹出一个框,提醒您手机电量过低,请充电的提示.其实电量改变就是一种广播类型,当电量过低时,系统就会发生一条广播,这时候正在运行的程序就会收

Android四大组件之一:ContentProvider(内容提供者)

Android中还提供了名为ContentProvider(内容提供者),可以向其他应用提供数据,但不常用,除非是同一公司开发的App,可以向不同应用提供数据.虽然为Android的四大组件之一,但用法并不复杂. 建立一个Activity,设置三个Button,分别用于手机相册,Mp3,Mp4的数据的获取.在这里用的是内部类监听方式,不要忘了注册监听. package com.example.administrator.jreduch09.contentprovider; import andr

Android 四大组件学习之BroadcastReceiver四

本节学习系统中特殊的广播接收者. 我们前面几节不是说了,当广播接受者一旦注册到系统中,当系统发送的广播和你注册的广播的action匹配时,系统就会启动广播接收者所在的进程.除非用户手动停止广播接收者所在的进程.但是生活中有这样一种情况,比如说:我在玩网络游戏,假设说游戏本身在系统电量低的情况下,会自动保存当前游戏的进度,也就是存档的.可以这么说,此广播接受者只有在用户玩游戏时才需要启动,别的时候用户是不需要的.如果此广播接收者一直常驻于系统,那不是很浪费系统资源.所以我们就需要动态的启动广播接收