【转】Pro Android学习笔记(六):了解Content Provider(中)
Content Provider的架构
Authority类似web中的域名,每个content provider会通过AndroidManifest.xml向系统注册authority,如下。其中name是类名,即如何找寻这个content provider。可以省去AndroidManifest.xml中package name,不需要写完整的类名。如android:name=".BookProvider"。
<provider android:name="SomeProvider" android:authorities="com.your-company.SomeProvider" />
<provider android:name="NotePadProvider" android:authorities="com.google.provider.NotePad" />
和web的URL域名类似,content provider进行数据访问的URL为content://authority/......,例如content://com.your-company.SomeProvider/。对于Android自己提供的content provider,有时会写的比较简单,例如用contacts来代替com.google.android.contacts,如content://contacts/……。
有时注册的provider会比较复杂,例如Android的联系人信息,其uri为content://com.android.contacts/contacts,其源代码信息为如下,该provider需要读写权限。
<provider android:name="ContactsProvider2"
android:authorities="contacts;com.android.contacts"
android:label="@string/provider_label"
android:multiprocess="false"
android:readPermission="android.permission.READ_CONTACTS"
android:writePermission="android.permission.WRITE_CONTACTS">
<path-permission
android:pathPrefix="/search_suggest_query"
android:readPermission="android.permission.GLOBAL_SEARCH"/>
<path-permission
android:pathPrefix="/search_suggest_shortcut"
android:readPermission="android.permission.GLOBAL_SEARCH"/>
<path-permission
android:pathPattern="/contacts/.*/photo"
android:readPermission="android.permission.GLOBAL_SEARCH"/>
<grant-uri-permission android:pathPattern=".*" />
</provider>
Content URI的结构。Android通过Content URI来获取数据,并返回具有行列结构的游标cursor。content UI的格式为:
content://<authority-name>/<path-segment1>/<path-segment2>/etc…
例子:content://com.google.provider.NotePad/notes/23
例子的/notes表示collection,或理解为一个目录,称为path segment,而/23表示特定的item,是具体的index,content provider提供的是二维数据,这就是该row的_id值。
MIME Type。HTTP响应会带有MIME Type,最长江就是text/html,告知body的数据类型。Content Provider也一样,可以用方法获得MIME。MIME由两部分组成:type/subtype,具体可以参考rfc2046。type和subtype的定义可以在IANA中查到。下面是MIME的几个例子:
text/xml
application/rtf
application/vnd.ms-excel //vnd是vendeor-specific,厂家自定义格式,如此处的微软excel格式
application/x-tar //x-表示自定义的私有格式
在Content Provider中可以存在多层目录,即存在item和collection,相应地分别有item的MIME tye和collection的MIME type。Android采用namespace的方式定义type和subtype。如下:
vnd.android.cursor.item/vnd.<yourcompanyname.contenttype> 是item的MIME type
vnd.android.cursor.dir/vnd.<yourcompanyname.contenttype>是collection的MIME type
从上面的格式可以看到,type已指定,开发者只能对subtype进行设置。
定义清晰描述。我们应该为所创建的content provider提供清晰的定义或描述,可通过所使用的Uri进行constant的预定义。例如MediaStore.Images.Media.INTERNETAL_CONTENT_URI表示content://media/internal/images。同时我们也应为个列
小例子:读取联系人信息。Provider通过uri去访问,返回游标(cursor),我们将通过下面的小例子进行验证,先进行Uri的了解,然后对cursor进行二次轮询,一次采用while,一次采用for方式。正如前面的contact provider在xml的定义所示,有读写权限限制,因此在XML中应赋予相应的权限:<uses-permission android:name="android.permission.READ_CONTACTS" />
|
private void contentProviderTest(){ /* 下面是一些uri的操作,作为测试,通过provider的Uri都会提供constant的方式 */ |
Where条件的用法。查找特定的数据,可以利用Uri,也可以利用manageQuery()方法的参数。例如希望查询select * from notes where _id=23,利用Uri,可以设置为
String noteUri = “content://com.google.progider.NotePad/notes/23”;
利用manageQuery( )中的selection擦数,同样可以表达为
managedQuery(uri, //为"content://com.google.provider.NotePad/notes"
null,
"_id=?" ,
new String[] {23} ,
null);
增加、修改、删除数据。增删改查是数据读写的四大功能,我们将在后面的小例子中给出详细的说明。
相关链接: 我的Android开发相关文章
转自http://blog.csdn.net/flowingflying/article/details/9217431
【转】Pro Android学习笔记(六):了解Content Provider(中)的更多相关文章
- 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart
目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(六八):HTTP服务(2):HTTP POST
目录(?)[-] 找一个测试网站 HTTP POST小例子 上次学习了HTTP GET请求,这次学习一下HTTP POST. 找一个测试网站 小例子好写,但要找个测试网站就有些麻烦,一下子无从入手,都 ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager
目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
随机推荐
- php类中const
常量 const 在类里面定义常量用 const 关键字,而不是通常的 define() 函数. 语法: const constant = "value"; 例子: <?ph ...
- windows下的常用命令
net start ... 启动某个服务 net stop ... 停止某个服务 net start 查看所有启动的服务 services.msc 打开服务的界面 ipconfig ...
- 九度OJ 1150:Counterfeit Dollar(假美元) (分析、检验)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:485 解决:215 题目描述: Sally Jones has a dozen Voyageur silver dollars. Howev ...
- linux rz sz命令
rz是receive zmodem的缩写,sz是send zmodem的缩写. 传输文件使用的是zmodem协议,所以叫zmodem. r和s是以服务器为主体的,服务器接收就是r,服务器发送就是s.
- 安装postgresql碰到Unable to write inside TEMP environment path
搞了半天,原来是 AVAST搞的鬼,把原来注册表的键值改成它自己了.其实应该是 C:\Windows\System32\vbscript.dll The answer in the following ...
- 【题解】[P3557 POI2013]GRA-Tower Defense Game
[题解][P3557 POI2013]GRA-Tower Defense Game 这道题是真的** 根据题目给的\(k\),可以知道,我们随便放塔,只要不全放一起,一定是一种合法的方案. 直接枚举就 ...
- Java分支循环结构
一.Java分支结构 1.if语句:一个 if 语句包含一个布尔表达式和一条或多条语句. if 语句的用语法如下: if(布尔表达式){ 如果布尔表达式为true将执行的语句 } public c ...
- matlab的调试
MATLAB(1)——基本调试方法(Debug) 链接:http://www.cnblogs.com/xingshansi/articles/6477185.html 前言 之前经 ...
- BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230 题意: 有n盏灯,一开始全是关着的. 有m次操作(p,a,b).p为0,则将区间[a ...
- IoC~MVC3+EF+Autofac实现松耦合的系统架构
MVC3+EF+Autofac网上这种文章确实没有,呵呵,今天就写一个,代大家分享! 这个系列的文章将带我们进入一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你 ...
