ContentProvider内容提供者

 

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

使用步骤:

         1:实现ContentProvider类

         2:重写物业需要的方法

         3:minifest.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添加指定的行数(如:数据库新加的一个列,返回rowNum为102;那么在之前的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;

其中使用到得参数:

         ContactID:ContactsContracts.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

其中使用到得参数:

         Email中Contact编号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());

                   }

         }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值