码迷,mamicode.com
首页 > 其他好文 > 详细

ContentProvider & ContentResolver

时间:2016-07-06 19:57:25      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

实现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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!