a
provider是一个组件需要在清单中配置,和activity是并列的关系。
android:authorities是内容提供者的唯一标示,其他应用根据这个找到这个内容提供者。
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provides.personprovider"/>

b.
访问联系人的provider
ContactTest.java
package cn.itcast.contact;import java.util.ArrayList;import android.content.ContentProviderOperation;import android.content.ContentProviderResult;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.provider.ContactsContract;import android.provider.ContactsContract.RawContacts;import android.provider.ContactsContract.CommonDataKinds.Email;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.Contacts.Data;import android.test.AndroidTestCase;import android.util.Log;public class ContactTest extends AndroidTestCase {private static final String TAG = "ContactTest";//获取通信录中所有的联系人public void testGetContacts() throws Throwable{ContentResolver contentResolver = this.getContext().getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/contacts");Cursor cursor = contentResolver.query(uri, null, null, null, null);while(cursor.moveToNext()){StringBuilder sb = new StringBuilder();String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); //得到id String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));//得到namesb.append("contactId=").append(contactId).append(",name=").append(name);//查询电话号码Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,          null,          ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,          null, null);  while(phones.moveToNext()){String phone = phones.getString(phones.getColumnIndex("data1")); sb.append(",phone=").append(phone);}//查询邮件Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,         null,         ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,         null, null); while(emails.moveToNext()){String email = emails.getString(emails.getColumnIndex("data1")); sb.append(",email=").append(email);}Log.i(TAG, sb.toString());}}/** * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId  * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 */public void testInsert() {ContentValues values = new ContentValues();//首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);long rawContactId = ContentUris.parseId(rawContactUri);//往data表入姓名数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型values.put(StructuredName.GIVEN_NAME, "李天山");this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表入电话数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);values.put(Phone.NUMBER, "13921009789");values.put(Phone.TYPE, Phone.TYPE_MOBILE);this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表入Email数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);values.put(Email.DATA, "liming@itcast.cn");values.put(Email.TYPE, Email.TYPE_WORK);this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);}public void testSave() throws Throwable{//文档位置:reference\android\provider\ContactsContract.RawContacts.htmlArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();int rawContactInsertIndex = 0;ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null).build());//文档位置:reference\android\provider\ContactsContract.Data.htmlops.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());}}}
调用
ContactTest contact =new ContactTest(this);        ArrayList<HashMap<String, Object>> persons = null ;                try {                persons = contact.GetContacts();for(int i=0;i<persons.size();i++){        HashMap<String, Object> map = new HashMap<String, Object>();        map.put("ItemImage", R.drawable.ic_launcher);//图像资源的ID        map.put("ItemTitle",(String) persons.get(i).get("name"));        map.put("ItemText", (String) persons.get(i).get("phone"));        mArrayList.add(map);}} catch (Throwable e) {// TODO Auto-generated catch blocke.printStackTrace();}

配置权限
<uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" />


android provider
参考itcast,谢谢作者

更多相关文章

  1. 【Android(安卓)开发教程】数据共享
  2. android之XmlResourceParser类使用实例
  3. Android的activity的title设定内容
  4. Android(安卓)获取GPS和网络定位信息
  5. Android(安卓)dialog 去除虚拟按键的解决方法
  6. Android(安卓)安卓微信分享
  7. 来电防火墙——学习记录
  8. 我的第一个python脚本
  9. Android(安卓)系统应用调用,intent的使用总结帖

随机推荐

  1. Android 全局异常处理
  2. android ViewParent requestDisallowInte
  3. android 事件的获取
  4. android选择时间攻略
  5. Android Studio 之 启动和停止服务
  6. Android 四大组件之 Activity
  7. Android 以太网调用流程
  8. Android intent跳转工具类
  9. Android handler使用说明
  10. Android监视器概述