contentProvider

第六天(上)

contentProvider

運用contentProvider訪問聯繫人—Button1
contentProvider添加聯繫人—Button2

package com.xiaogao.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","[email protected]");
                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","[email protected]");
                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"/>
發佈了31 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章