Android之URI如何提供-ContentProvider <2>
如果其他android APP要访问我开发的APP中保存的数据,那么我将如何提供数据接口给其他APP使用了,根据上一篇文章,我需要提供一张名片给其他APP.
需要依靠什么东西印出这样一张名片了,Android中四大组件中的ContentProvider提供了帮助,Android四大组件在使用过程中都需要在AndroidManifest.xml中声明,
那么这个URI这个名片就印在这个声明中:
在AndroidMainfest.xml中申明,ContentProvider采用了authorities(主机名/域名)对它进行唯一标识,你可以把ContentProvider看作是一个网站:
<application android:icon="@drawable/icon" android:label="@string/app_name"> <provider android:name=".PersonContentProvider" android:authorities="com.ljq.providers.personprovider"/> </application>
如果想创建自己的contentprovider,最好把自定义的URI设置为类的常量,这样简化别人的调用,并且以后如果更新URI也很容易。
使用已经提供ContentProvider的应用程序中的数据:
应用可以通过一个唯一的ContentResolver interface来使用具体的某个content provider。
ContentResolver cr = getContentResolver();
然后就可以用ContentResolver提供的方法来使用需要的content provider了。其中contentResolver提供的方法包括query(),insert(),update()等。ContentResolver实例带的方法可实现找到指定的Contentprovider并获取到Contentprovider的数据。
contentprovider的用户都不可能直接访问到contentprovider实例,只能通过ContentResolver在中间代理。Contentprovider返回的数据结构,是类似JDBC的ResultSet,在android中,是Cursor对象。
ContentProvider负责
组织应用程序的数据;
向其他应用程序提供数据;
ContentResolver则负责
获取ContentProvider提供的数据;
修改/添加/删除更新数据等;
一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露
ContentProvider应该是Android在系统启动时就创建了,否则就谈不上数据共享了。 这就要求在AndroidManifest.XML中使用元素明确定义。
在具体使用的过程中被解析的字符串Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")后面person如何得知,似乎是个谜团,假如我完全不知道这个ContentProvider中有什么表明,那还怎么操作呀!同时这个被解析的字符串需要人工自己按照一定的规定进行拼写,参见前面几篇文章.

浙公网安备 33010602011771号