标签:
实现contentresolver 结合手机的联系人来完成一个简单的联系人管理的工具demo
实现contentresolver 结合手机的联系人来完成一个简单的联系人管理的工具demo */ public class MainActivity extends Activity { // 获取联系人 // 首先需要的是联系人的CotentProvider的Uri;这些是系统提供给开发者的 // Uri uri_contacts = ContactsContract.Contacts.CONTENT_URI; // Uri uri_contacts_phones = // ContactsContract.CommonDataKinds.Phone.CONTENT_URI; // Uri uri_contacts_emails = // ContactsContract.CommonDataKinds.Email.CONTENT_URI; // 实际上这两种获取uri的方式最终获取到的数据并不一样,地下这个获取的更加多(包括已经删除的,但是表中还存在) Uri uri_contacts = Uri.parse("content://com.android.contacts/raw_contacts"); Uri uri_contacts_phones = Uri .parse("content://com.android.contacts/data/phones"); Uri uri_contacts_emails = Uri .parse("content://com.android.contacts/data/emails"); // 从raw_contacts表中或许联系人的id和联系人的姓名。 private List<Map<String, Object>> listContacts = new ArrayList<Map<String, Object>>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.textView1); // 调用方法 listContacts = getList_contacts(getContentResolver()); tv.setText(listContacts.toString()); } // 获取联系人信息的方法(查) public List<Map<String, Object>> getList_contacts(ContentResolver resolver) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); // 使用resolver查询query()是五个参数(uri,规划要查询的字段,查询语句,替代?的词,排序方式) // 需要一个Cursor对象来接收查询到的数据 Cursor cursor = resolver.query(uri_contacts, new String[] { "_id", "display_name" }, null, null, null); // 要展示数据需要对cursor对象来遍历 while (cursor.moveToNext()) { int contacts_id = cursor.getInt(cursor.getColumnIndex("_id")); String contacts_name = cursor.getString(cursor .getColumnIndex("display_name")); // 用Map来存储每一个联系人 Map<String, Object> map = new HashMap<String, Object>(); map.put("id", contacts_id + ""); map.put("name", contacts_name); // 剩下的就是把该联系人的email和电话号码查出来加到map中 Cursor cursor_phones = resolver .query(uri_contacts_phones, new String[] { "raw_contact_id", "data1" }, "raw_contact_id=?", new String[] { contacts_id + "" }, null); while (cursor_phones.moveToNext()) { // 因为此查的是第二列,我们直接写1就可以了(第一列是id,第二列是phones 我们应该事先知道) // 由于这个电话可能为多个,所以还是用“|”隔开 用更节省空间的Stringbuffer来做 StringBuffer phone = new StringBuffer(); phone = phone.append("|" + cursor_phones.getString(1)); map.put("phones", phone.toString()); } // 获取emails Cursor cursor_emails = resolver .query(uri_contacts_emails, new String[] { "raw_contact_id", "data1" }, "raw_contact_id=?", new String[] { contacts_id + "" }, null); while (cursor_emails.moveToNext()) { StringBuffer sb = new StringBuffer(); sb = sb.append("|" + cursor_emails.getString(1)); map.put("emails", sb.toString()); } list.add(map); } return list; } //向联系人插入一条联系人 // 以下方法是利用常量值所写的插入联系人的方法。如果希望封装成方法,再增加一个Map集合的参数,用来传入信息即可。 public void insertContacts(ContentValues values, ContentResolver resolver) { // 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = resolver.insert( ContactsContract.RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); // 往data表入姓名数据 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); values.put( ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "chen"); values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "chen"); resolver.insert(ContactsContract.Data.CONTENT_URI, values); // 往data表入电话数据 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "13520551441"); values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); resolver.insert(ContactsContract.Data.CONTENT_URI, values); // 往data表入Email数据 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Email.DATA, "2359090@qq.com"); values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK); resolver.insert(ContactsContract.Data.CONTENT_URI, values); } }
ContentProvider & ContentResolver
标签:
原文地址:http://www.cnblogs.com/gloryhope/p/5647768.html