学习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());
}
}