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

contentProvider

时间:2016-07-13 17:44:03      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

第六天(上)

contentProvider

运用contentProvider访问联系人—Button1
contentProvider添加联系人—Button2

package com.lanou.user.android2lesson_06_systemcontentprovider;


public class MainActivity extends AppCompatActivity {

    /**
     * 调用系统提供的contentProvider
     * 今天已获取联系人为例
     * 系统在写联系人这个APP的时候,就已经提供好了一个联系人的contentProvider
     * 看一下系统提供的联系人数据库
     * <p/>
     * 源码里面都有,我们看截图
     * raw_contacts表
     * contact_id 存放联系人的id
     * <p/>
     * data表
     * 这个表是用来存储所有联系人的详细信息的
     * 一个联系人的信息可能分为多条数据
     * 其中比较重要的字段是数据类型,联系人id,还有数据内容
     * <p/>
     * 其中有一个字段mime_type是数据的类型,(电话、邮箱、名字等)
     * <p/>
     * mime_type表
     * 就是联系人所有的数据类型选项
     * <p/>
     * 看源码可以看出contentProvider有两个Uri,两个都是可以用的,但是,在4.0之后,只能使用分好后面的Uri,该路径是
     * <p/>
     * <p/>
     * 如果要获取联系人的数据,怎么做?
     * 1、获取所有人的联系id
     * 2、根据id查询到这个联系人
     */


    private Button getContects;
    private Button setContects;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getContects = (Button) findViewById(R.id.main_getContects);
        setContects = (Button) findViewById(R.id.main_setContects);
        getContects.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //在这里进行联系人的获取
                ContentResolver cr = getContentResolver();
                //1.获取所有联系人的id
                Cursor cursorID = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
                if (cursorID.getCount() == 0) {
                    Toast.makeText(MainActivity.this, "没有联系人", Toast.LENGTH_SHORT).show();
                    return;
                }
                //2.根据id获取到每一个联系人的所有信息
                while (cursorID.moveToNext()) {
                    //拿到id的字符串
                    String contactid = cursorID.getString(cursorID.getColumnIndex("contact_id"));
                    //根据id去data数据库里查询联系人的所有信息
                    Cursor contactData = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, "raw_contact_id=?", new String[]{contactid}, null);
                    //遍历获取联系人信息
                    while (contactData.moveToNext()) {
                        //拿到数据内容
                        String data1 = contactData.getString(contactData.getColumnIndex("data1"));
                        //拿到数据类型
                        String mimetype = contactData.getString(contactData.getColumnIndex("mimetype"));
                        if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
                            Log.i("邮箱", data1);
                        } else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
                            Log.i("手机:", data1);
                        } else if ("vnd.android.cursor.item/name".equals(mimetype)) {
                            Log.i("名字:", data1);
                        }


                    }
                    //关闭游标对象,释放内存
                    contactData.close();
                }
                //关闭游标对象,释放内存
                cursorID.close();
                //3.添加权限,允许读取ContentProvider

            }
        });

给系统添加联系人

        /**
         * 插入联系人
         *
         */
        setContects.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                /*通过上面分析,我们想要插入联系人,就需要如下的操作:
                1、先去 raw_contacts 表中添加 id;
                2、然后借助 id 去 data 表中添加各种信息。
                */
                ContentResolver cr = getContentResolver();
//先查询 raw_contacts 表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的 id
                Cursor cursorId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"),
                        new String[]{"_id"}, null, null, null);
//默认联系人 id 就是 1
                int contact_id = 1;
                if (cursorId.moveToLast()) {
                    //拿到主键
                    int _id = cursorId.getInt(cursorId.getColumnIndex("_id")); //主键+1,就是要插入的联系人
                    contact_id = ++_id;
                }
//把 contact_id 添加到 raw_contacts 表中
                ContentValues values = new ContentValues();
                values.put("contact_id", contact_id);
                cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
//清空 ContentValues 插入姓名
                values.clear();
                values.put("data1", "小明");
                values.put("mimetype", "vnd.android.cursor.item/name");
                values.put("raw_contact_id", contact_id);
                cr.insert(Uri.parse("content://com.android.contacts/data"), values);
//清空 ContentValues 插入电话
                values.clear();
                values.put("data1", "7966888");
                values.put("mimetype", "vnd.android.cursor.item/phone_v2");
                values.put("raw_contact_id", contact_id);
                cr.insert(Uri.parse("content://com.android.contacts/data"), values);
//清空 ContentValues 插入邮箱
                values.clear();
                values.put("data1","79845430@qq.com");
                values.put("mimetype","vnd.android.cursor.item/email_v2");
                values.put("raw_contact_id",contact_id);
                cr.insert(Uri.parse("content://com.android.contacts/data"), values);
                cursorId.close();


                ContentResolver cr1 = getContentResolver();
//先查询 raw_contacts 表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的 id
                Cursor cursorId1 = cr1.query(Uri.parse("content://com.android.contacts/raw_contacts"),
                        new String[]{"_id"}, null, null, null);
                int contact_sid = 2;
                if (cursorId1.moveToLast()) {
                    //拿到主键
                    int _id = cursorId1.getInt(cursorId1.getColumnIndex("_id")); //主键+1,就是要插入的联系人
                    contact_sid = ++_id;
                }
//把 contact_id 添加到 raw_contacts 表中
                ContentValues values1 = new ContentValues();
                values1.put("contact_id", contact_sid);
                cr1.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values1);
                //清空 ContentValues 插入姓名
                values1.clear();
                values1.put("data1", "小红");
                values1.put("mimetype", "vnd.android.cursor.item/name");
                values1.put("raw_contact_id", contact_sid);
                cr1.insert(Uri.parse("content://com.android.contacts/data"), values1);
//清空 ContentValues 插入电话
                values1.clear();
                values1.put("data1", "7966999");
                values1.put("mimetype", "vnd.android.cursor.item/phone_v2");
                values1.put("raw_contact_id", contact_sid);
                cr1.insert(Uri.parse("content://com.android.contacts/data"), values1);
//清空 ContentValues 插入邮箱
                values1.clear();
                values1.put("data1","39845430@qq.com");
                values1.put("mimetype","vnd.android.cursor.item/email_v2");
                values1.put("raw_contact_id",contact_sid);
                cr1.insert(Uri.parse("content://com.android.contacts/data"), values1);
                cursorId1.close();
                Toast.makeText(MainActivity.this, "插入联系人成功", Toast.LENGTH_SHORT).show();
                ;
            }
        });


    }
}

注意:记住加权限在Manifest.xml

<uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>

contentProvider

标签:

原文地址:http://blog.csdn.net/glm_970414161/article/details/51884917

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