`
童梦新苑
  • 浏览: 41101 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ContentProvider内容提供者

 
阅读更多

学习Android的朋友欢迎加入:群 59324839(QQ)

使用步骤:

         1:实现ContentProvider

         2:重写物业需要的方法

         3minifest.xml配置:<provider android:name=”你的类名地址(与Activity一样)  android:author=”让其他程序访问的Uri地址”></provider>

继承ContentProvider实现insert update delete  etc方法的Uri都表示一个数据

那么要让其他程序访问这个应用数据;我们就要用到Uri对象;然后我们就来操作Uri对象

首先我们要匹配Uri

使用:UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH); // UriMatcher.NO_MATCH标示不匹配任何路径的返回码,

2 sMatcher.addURI(“org.zhou.demo”,”person”,1);//其中包含三个参数

         [1]:匹配的Uri地址

         [2]:访问的路径

         [3]:Uri与路径都相同了后,返回的一个匹配状态吗

 

3:为一个Uri添加指定的行数(如:数据库新加的一个列,返回rowNum102;那么在之前的Uri再加上这个数字102

         Uri  uri  =  ContentUris.withAppendId(agoUri,rowid);

4:关于类型的引用;getType();---继承与ContentProvider

         如:一个Uri代表的数据为集合形式那么,应该以:vnd.android.cursor.dir/开头 

一个Uri代表的数据为单个形式那么,应该以:vnd.android.cursor.item/开头 

 

                                          

5:ContentProvider以外的程序调用须使用:ContentResolver对象,同时它提供与ContentProvider想同的方法

Uri  insertUri = Uri.parse(“content://org.zhou.demo/person”);//person就为路径

ContentResolver.insert(insertUri, values)

 

数据变化的通知

1:ContentProvider插入中的this.getContent().getContentResolver().notifyChange(uri,null);

2:CotentResolver()中进行监听,

         //insertUri为前面(即:ContentProvider insert操作中)定义的

         ContentResolver.registerContentObserver(insertUri,true,  new PersonObserver(new Handler()));

         //这个的personObserver非常重要的

         Class personObserver entends ContentObserver{

                   Public PersonObserver(Handler handler){

}

 

Public void onChange(Boolean selfChange){

         //这里就是在接收到数据改变要处理的函数

}

}

 

6:联系人的使用:

         Uri uri = ContactsContract.Contacts.CONTENT_URI;

        

Contact中的ContentProvider

调用Uri:--à>>uri = ContactsContract.contact.CONTENT_URI;

其中使用到得参数:

         ContactIDContactsContracts.Contacts._ID;

         Contact姓名:ContactsContracts.Contacts.DISPLAY_NAME;

调用电话Uri-à>>ContactContracts.CommonDataKinds.Phone.CONTENT_URI;

其中使用到得参数:

         PhoneContact编号:ContactContract.CommonDataKinds.Phone.CONTACT_ID

         Contact中电话号码:ContactContract.CommonDataKinds.Phone.NUMBER;

调用Email

其中使用到得参数:

         EmailContact编号ContactContract.CommonDataKinds.Email.CONTACT_ID;;

         Email中的邮箱内容:ContactContract.CommonDataKinds.Email.DATA;

 

联系人添加操作:

//批量添加,处于同一个事务中

         public void testSave() throws Throwable{

                   //文档位置:reference\android\provider\ContactsContract.RawContacts.html

                   ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

                   int rawContactInsertIndex = ops.size();

                   ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)

                                     .withValue(RawContacts.ACCOUNT_TYPE, null)

                                     .withValue(RawContacts.ACCOUNT_NAME, null)

                                     .build());

                   //文档位置:reference\android\provider\ContactsContract.Data.html

                   ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)

                                     .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)

                                     .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)

                                     .withValue(StructuredName.GIVEN_NAME, "赵薇")

                                     .build());

                   ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)

                                      .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)

                            .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)

                            .withValue(Phone.NUMBER, "13671323809")

                            .withValue(Phone.TYPE, Phone.TYPE_MOBILE)

                            .withValue(Phone.LABEL, "手机号")

                            .build());

                   ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)

                                      .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)

                            .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)

                            .withValue(Email.DATA, "liming@itcast.cn")

                            .withValue(Email.TYPE, Email.TYPE_WORK)

                            .build());

                   ContentProviderResult[] results = this.getContext().getContentResolver()

                            .applyBatch(ContactsContract.AUTHORITY, ops);

                   for(ContentProviderResult result : results){

                            Log.i(TAG, result.uri.toString());

                   }

         }

 

分享到:
评论

相关推荐

    ContentProvider 内容提供者完整代码

    在这个“ContentProvider 内容提供者完整代码”压缩包中,我们可以深入理解ContentProvider的工作原理以及如何实现它。 首先,我们来详细解释ContentProvider的基本概念。ContentProvider是一个抽象类,需要我们...

    android ContentProvider内容提供者

    3. **操作方法**: ContentProvider提供了一组标准的CRUD(创建、读取、更新、删除)方法:`insert()`, `query()`, `update()`, `delete()`,用于对数据进行操作。 二、ContentProvider的实现步骤 1. **定义...

    ContentProvider 内容提供者完美示例.zip

    然而,ContentProvider为其他应用程序提供了安全访问这些私有数据的途径,使得数据共享变得可能。 ContentProvider的工作原理基于URI(统一资源标识符)和Cursor,它将数据模型与UI(用户界面)解耦。当一个应用想...

    内容提供者ContentProvider

    3. 更新数据:通过ContentResolver调用update()方法,传入URI、ContentValues更新内容和选择器,ContentProvider更新对应数据并返回受影响的行数。 4. 删除数据:通过ContentResolver调用delete()方法,传入URI和...

    Android内容提供者(Content provider)

    在Android系统中,内容提供者(Content Provider)是四大组件之一,它负责在应用程序之间共享数据。内容提供者是一个接口,使得其他应用可以访问存储在特定应用中的私有数据,甚至是系统级别的数据。通过实现内容...

    android 内容提供者 ContentProvider

    在Android系统中,内容提供者(ContentProvider)是四大组件之一,它扮演着数据共享与交换的关键角色。ContentProvider使得应用程序之间可以安全地共享数据,无论是应用内的数据,还是跨应用的数据。它遵循统一的URI...

    Android中ContentProvider(内容题供着)2访问自定义的内容提供者,共享Sqlite数据库数据

    通过这个项目,你可以学习到如何设计和实现一个功能完备的内容提供者,从而使得其他应用可以安全地读取和修改你的应用数据。 总之,ContentProvider是Android框架中不可或缺的一部分,它使得数据共享成为可能,促进...

    Android内容提供者ContentProvider实例

    在Android开发中,内容提供者(ContentProvider)是四大组件之一,它负责在应用程序之间共享数据。本实例将深入解析如何创建和使用一个简单的ContentProvider,同时涉及与数据库的操作。 一、ContentProvider基础 ...

    Android 内容提供者、解释者和观察者小例

    - 实现内容提供者通常需要创建一个ContentProvider类,继承自android.content.ContentProvider,实现insert、query、delete、update等方法,根据业务逻辑处理数据操作。 - 消费者应用通过ContentResolver发起查询...

    Android项目实战--手机卫士26--内容提供者与内容观察者

    在Android开发中,内容提供者(Content Provider)和内容观察者(Content Observer)是两个非常重要的组件,它们在数据共享和实时数据更新方面扮演着关键角色。本篇将深入探讨这两个概念及其在“手机卫士”这样的...

    android的内容提供者

    总结起来,Android的内容提供者ContentProvider是实现应用间数据共享的重要工具。通过创建和注册ContentProvider,开发者可以将自己的数据暴露给其他应用,同时也可以访问其他应用公开的数据。通过ContentObserver,...

    自定义内容提供者和调用系统联系人

    在Android开发中,内容提供者(Content Provider)是Android四大组件之一,它是应用程序间数据共享的重要机制。通过自定义内容提供者,开发者可以将自己的数据结构公开给其他应用,实现跨应用的数据交换。本主题将...

    Android中ContentProvider(内容题供着)1访问系统的内容提供者

    本篇文章将深入探讨ContentProvider的工作原理、如何创建以及如何通过ContentProvider访问系统的内容提供者,特别是针对联系人数据的读取。 一、ContentProvider概述 ContentProvider作为一个标准化的数据接口,...

    android之内容提供者解析

    在Android系统中,内容提供者(Content Provider)是应用程序间数据共享的重要机制。它允许一个应用将自己的数据结构公开,让其他应用可以访问和操作这些数据,就像操作SQLite数据库一样。这篇博客“android之内容...

    android 内容提供者

    3. **内容提供者类(Content Provider Class)**:开发者需要继承`android.content.ContentProvider`并实现其抽象方法,以完成对数据的操作。 ### 二、内容提供者的注册 在AndroidManifest.xml文件中,我们需要...

    android 自定义 ContentProvider 以及 ContentResolver

    2. **构造ContentResolver操作**:使用`ContentResolver`提供的方法,如`query()`、`insert()`、`update()`和`delete()`,并传入合适的URI、选择条件等参数。 3. **处理Cursor**:`query()`方法会返回一个Cursor...

    使用android通讯录中的内容提供者实例

    内容提供者是一个实现了ContentProvider类的组件,它负责存储、检索以及更新应用程序的数据。每个内容提供者都有一个唯一的URI(统一资源标识符),通过这个URI,其他应用可以请求数据。 二、Android通讯录内容提供...

    Andriod内容提供者编程实例

    内容提供者是一种特殊的类,继承自`android.content.ContentProvider`,并实现了必要的方法来读写数据。它允许应用程序将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。这种机制使得数据共享成为...

    android内容提供者

    1. 创建内容提供者类:继承自ContentProvider,实现其抽象方法,如onCreate()、query()、insert()、delete()、update()等。 2. 注册内容提供者:在AndroidManifest.xml中声明内容提供者,指定对应的URI、类名及权限...

Global site tag (gtag.js) - Google Analytics