Android 擷取系統的連絡人,android擷取連絡人

來源:互聯網
上載者:User

Android 擷取系統的連絡人,android擷取連絡人

本文主要介紹android中怎樣擷取系統的連絡人資料

首先開啟模擬器

點擊連絡人表徵圖按鈕

說明系統連絡人資料庫是空的,開啟File explorer,找到data/data下面的檔案夾:

將contacts2.db檔案匯出,添加到sqlite中的時候報錯:

點擊“ok”忽略之

表結構相當的複雜,首先搞清楚其中的三張表

* data表 儲存連絡人的資料

* raw_contacts表 儲存連絡人的id contact_id

* mimetypes表 儲存連絡人資料的類型

接下來通過模擬器新增連絡人...

通過sqlite重新整理contacts2.db,忽略提示錯誤

擷取連絡人步驟

1. 查詢raw_contacts表,把連絡人的id取出來

2. 根據連絡人的id,查詢data表,把這個id的資料取出來

3. 根據mimetype區分資料的類型

接下來通過代碼實現

package com.wuyudong.getcontacts;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    /**     * 擷取全部的連絡人     *      * @param view     */    public void click(View view) {        ContentResolver resolver = getContentResolver();        // 1.查詢raw_contacts表,把連絡人的id取出來        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");        Uri datauri = Uri.parse("content://com.android.contacts/data");        Cursor cursor = resolver.query(uri, new String[] { "contact_id" },                null, null, null);        while (cursor.moveToNext()) {            String id = cursor.getString(0);            System.out.println("連絡人id: " + id);            // 2.根據連絡人的id,查詢data表,把這個id的資料取出來            // 系統api查詢data表的時候不是真正的查詢的data表,而是查詢data表的視圖            Cursor dataCursor = resolver.query(datauri, new String[] { "data1", "mimetype" },                            "raw_contact_id=?", new String[] { id }, null);            while (dataCursor.moveToNext()) {                String data1 = dataCursor.getString(0);                System.out.println("data1=" + data1);                String mimetype = dataCursor.getString(1);                System.out.println("mimetype=" + mimetype);            }            dataCursor.close();        }        cursor.close();    }}

添加許可權:android.permission.READ_CONTACTS

運行後列印相關的結果:

06-18 10:59:41.556: I/System.out(2127): 連絡人id: 1
06-18 10:59:41.636: I/System.out(2127): data1=110
06-18 10:59:41.636: I/System.out(2127): mimetype=vnd.android.cursor.item/phone_v2
06-18 10:59:41.646: I/System.out(2127): data1=wuyudong@wuyudong.com
06-18 10:59:41.646: I/System.out(2127): mimetype=vnd.android.cursor.item/email_v2
06-18 10:59:41.646: I/System.out(2127): data1=Wuyudong
06-18 10:59:41.646: I/System.out(2127): mimetype=vnd.android.cursor.item/name

通過上面的列印資訊,可以修改程式

package com.wuyudong.getcontacts;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    /**     * 擷取全部的連絡人     *      * @param view     */    public void click(View view) {        ContentResolver resolver = getContentResolver();        // 1.查詢raw_contacts表,把連絡人的id取出來        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");        Uri datauri = Uri.parse("content://com.android.contacts/data");        Cursor cursor = resolver.query(uri, new String[] { "contact_id" },                null, null, null);        while (cursor.moveToNext()) {            String id = cursor.getString(0);            System.out.println("連絡人id: " + id);            // 2.根據連絡人的id,查詢data表,把這個id的資料取出來            // 系統api查詢data表的時候不是真正的查詢的data表,而是查詢data表的視圖            Cursor dataCursor = resolver                    .query(datauri, new String[] { "data1", "mimetype" },                            "raw_contact_id=?", new String[] { id }, null);            while (dataCursor.moveToNext()) {                String data1 = dataCursor.getString(0);                String mimetype = dataCursor.getString(1);                if ("vnd.android.cursor.item/name".equals(mimetype)) {                    System.out.println("姓名=" + data1);                } else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {                    System.out.println("郵箱=" + data1);                } else if ("vnd.android.cursor.item/phone_v2".equals(data1)) {                    System.out.println("電話=" + data1);                } else if ("vnd.android.cursor.item/im".equals(mimetype)) {                    System.out.println("QQ=" + data1);                }            }            dataCursor.close();        }        cursor.close();    }}

運行後列印相關的結果:

06-18 11:17:57.312: I/System.out(2380): 連絡人id: 1
06-18 11:17:57.452: I/System.out(2380): 郵箱=wuyudong@wuyudong.com
06-18 11:17:57.452: I/System.out(2380): 姓名=Wuyudong
06-18 11:17:57.452: I/System.out(2380): QQ=11111111
06-18 11:17:57.482: I/System.out(2380): 連絡人id: 2
06-18 11:17:57.572: I/System.out(2380): QQ=32423423422
06-18 11:17:57.572: I/System.out(2380): 郵箱=wu@wuyudong.com
06-18 11:17:57.572: I/System.out(2380): 姓名=Zhangsan

最後將這些操作封裝成api,便於以後使用

建立ContactInfoParser.java檔案

package com.wuyudong.getcontacts.service;import java.util.ArrayList;import java.util.List;import com.wuyudong.getcontacts.domain.ContactInfo;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.net.Uri;public class ContactInfoParser {    /**     * 擷取系統全部連絡人的api方法     *      * @param context     * @return     */    public static List<ContactInfo> findAll(Context context) {        ContentResolver resolver = context.getContentResolver();        // 1.查詢raw_contacts表,把連絡人的id取出來        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");        Uri datauri = Uri.parse("content://com.android.contacts/data");        List<ContactInfo> infos = new ArrayList<ContactInfo>();        Cursor cursor = resolver.query(uri, new String[] { "contact_id" },                null, null, null);        while (cursor.moveToNext()) {            String id = cursor.getString(0);            if (id != null) {                System.out.println("連絡人id: " + id);                ContactInfo info = new ContactInfo();                info.setId(id);                // 2.根據連絡人的id,查詢data表,把這個id的資料取出來                // 系統api查詢data表的時候不是真正的查詢的data表,而是查詢data表的視圖                Cursor dataCursor = resolver.query(datauri, new String[] {                        "data1", "mimetype" }, "raw_contact_id=?",                        new String[] { id }, null);                while (dataCursor.moveToNext()) {                    String data1 = dataCursor.getString(0);                    String mimetype = dataCursor.getString(1);                    if ("vnd.android.cursor.item/name".equals(mimetype)) {                        System.out.println("姓名=" + data1);                        info.setName(data1);                    } else if ("vnd.android.cursor.item/email_v2"                            .equals(mimetype)) {                        System.out.println("郵箱=" + data1);                        info.setEmail(data1);                    } else if ("vnd.android.cursor.item/phone_v2".equals(data1)) {                        System.out.println("電話=" + data1);                        info.setPhone(data1);                    } else if ("vnd.android.cursor.item/im".equals(mimetype)) {                        System.out.println("QQ=" + data1);                        info.setQq(data1);                    }                }                infos.add(info);                System.out.println("-------");                dataCursor.close();            }        }        cursor.close();        return infos;    }}

建立ContactInfo.java

package com.wuyudong.getcontacts.domain;public class ContactInfo {        private String name;    private String id;    private String phone;    private String email;    private String qq;        @Override    public String toString() {        return "ContactInfo [name=" + name + ", id=" + id + ", phone=" + phone                + ", email=" + email + ", qq=" + qq + "]";    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getQq() {        return qq;    }    public void setQq(String qq) {        this.qq = qq;    }        }

最後調用相關api

package com.wuyudong.getcontacts;import java.util.List;import com.wuyudong.getcontacts.domain.ContactInfo;import com.wuyudong.getcontacts.service.ContactInfoParser;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    /**     * 擷取全部的連絡人     *      * @param view     */    public void click(View view) {        List<ContactInfo> infos = ContactInfoParser.findAll(this);        for (ContactInfo info : infos) {            System.out.println(info.toString());        }    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.