概述
看到这里的时候咱们假设满足一下一个或几个前提:
⑴你看过别人的博客,但是对实际应用还是有些迷惑:
⑵或者你对大概流程似乎有一点理解,但还是不明了;
⑶你干脆就是懒,只想用一下,懒得去理解
1~3的内容是比较死的套路,但是内容灵活
1.先从Manifest开始说,如下图:
新建ContentProvider的类是要在manifest里面注册的,当然,因为它也是四大组件嘛,要注册在<application>的里面。对于他的属性,那么和activity是一样的,不用多说,authorities属性很关键,这个属性是用来唯一标示当前Provider的标志,一般使用包名加类名,当然随便写也是可以的,但是...
2.Provider类的声明部分:
static{}里面是静态代码块,会优先执行。在下面代码使用uriMatcher.match(uri) 时返回的int值(就是第三个参数)就是这里注册的,很关键。当然了,如果你的是包括好几种数据方式,那就有几种定义几种,然后一一对应都注册上。
AUTHORITY和manifest中的authorities是一样,必须一样。强制要求,不然出问题。
3.Provider的返回数据部分
当有多种查询(增删改也一样)需求的时候,就需要根据 uriMatcher.match(uri) 做出对应处理了,这个就不想洗说了
4.关于getType()方法:
我相信很多人都迷惑过,也搞不清楚,下面链接讲的还是比较详细的,推荐看一下
http://blog.csdn.net/imyfriend/article/details/6589917
这里复制一下他的结论:覆盖ContentProvider的getType方法对于用new Intent(String action, Uri uri)方法启动activity是很重要的,如果它返回的MIME type和activity在<intent filter>中定义的data的MIME type不一致,将造成activity无法启动。
再简单点就是:你不用uri隐式启动(好像是这个名字)的时候,你完全可以不管他的。
5.到了你这里,当你运行程序以后,用别的app调用时你会感慨:
氧化钙!为什么没有数据!!
其实前面留了一个坑,如果想跨应用的话(废话!),就在manifest里面加上一句,如下图:
6.ContentResolver:
比Provider理解上简单多了,就是简单的数据库操作,只是你不使用数据库表名而是使用Uri,而且只能对Provider提供的内容进行处理(换个表达:Urii就是严格定义并限制了你被允许的操作,只能少不能多)。
就这些吧,老夫贴图,就是不直接粘代码,哈哈哈!
最后
以上就是留胡子宝贝为你收集整理的跨应用数据提供的解决:ContentProvider和ContentResolver的全部内容,希望文章能够帮你解决跨应用数据提供的解决:ContentProvider和ContentResolver所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复