Android讀取簡訊和連絡人

來源:互聯網
上載者:User

標籤:break   gets   move   集合   oid   str   next   div   switch   

讀取簡訊和連絡人經常會用到,要瞭解的是這是內容提供者的知識點

先說簡訊,要從資料庫中擷取資料,就要瞭解其結構

簡訊資料庫在data-->data中的下面路徑

它的表結構如下,有3個是我們要注意的

Java代碼為

     //擷取內容提供者        ContentResolver contentResolver = getContentResolver();        //擷取簡訊表的路徑        Uri uri = Uri.parse("content://sms");        //設定要查詢的列名        String[] line = {"address", "date", "body"};        //各個參數的意思,路徑、列名、條件、條件參數、排序        Cursor cursor = contentResolver.query(uri, line, null, null, null);        //下面就跟操作普通資料庫一樣了        if (cursor != null) {            while (cursor.moveToNext()) {                String address = cursor.getString(cursor.getColumnIndex("address"));                String date = cursor.getString(cursor.getColumnIndex("date"));                String body = cursor.getString(cursor.getColumnIndex("body"));                Log.e("簡訊", "address:" + address + "\ndate:" + date + "\nbody:" + body);            }            cursor.close();        }

擷取連絡人就比較複雜了,其表結構也比較複雜

資料庫所在位置data-->data中的下面路徑

data表

 

mimetypes表

 raw_contacts表

瞭解其表結果後,就開始寫代碼了

       private List<ContactsData> contactsDatas = new ArrayList<>();
        //擷取內容提供者        ContentResolver contentResolver = getContentResolver();        //擷取raw_contacts表的路徑        Uri raw_contact_uri = Uri.parse("content://com.android.contacts/raw_contacts");        //各個參數的意思,路徑、列名、條件、條件參數、排序        Cursor contactId = contentResolver.query(raw_contact_uri, new String[]{"contact_id"}, null, null, null);        //下面就跟操作普通資料庫一樣了        if (contactId != null) {            while (contactId.moveToNext()) {                //擷取contact_id的值,它對應data表中raw_contact_id的值                String id = contactId.getString(contactId.getColumnIndex("contact_id"));                //擷取data表的路徑                Uri data_uri = Uri.parse("content://com.android.contacts/data");                //各個參數的意思,路徑、列名、條件、條件參數、排序                Cursor dataCursor = contentResolver.query(data_uri, new String[]{"mimetype", "data1"},                        "raw_contact_id=?", new String[]{id}, null);                if (dataCursor != null) {                    //每次迴圈建立一個執行個體用於儲存data表中的資料                    ContactsData contactsData = new ContactsData();                    while (dataCursor.moveToNext()) {                        String type = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));                        switch (type) {                            case "vnd.android.cursor.item/email_v2":                                //這是郵箱資訊                                contactsData.setEmail(dataCursor.getString(dataCursor.getColumnIndex("data1")));                                break;                            case "vnd.android.cursor.item/phone_v2":                                //這是手機號碼資訊                                contactsData.setNumber(dataCursor.getString(dataCursor.getColumnIndex("data1")));                                break;                            case "vnd.android.cursor.item/name":                                //這是連絡人的名字                                contactsData.setName(dataCursor.getString(dataCursor.getColumnIndex("data1")));                                break;                        }                    }                    //把查詢到的資訊添加到集合中                    contactsDatas.add(contactsData);                    dataCursor.close();                }            }            contactId.close();        }        for (ContactsData c : contactsDatas) {            Log.e("連絡人", c.toString());            Toast.makeText(this,c.toString(),Toast.LENGTH_SHORT).show();        }

為了方便管理建立一個Javabean

public class ContactsData {    private String email;    private String number;    private String name;    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "ContactsData{" +                "email=‘" + email + ‘\‘‘ +                ", number=‘" + number + ‘\‘‘ +                ", name=‘" + name + ‘\‘‘ +                ‘}‘;    }}

 

最後別忘了加上許可權

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

如過是Android 6.0以上的版本還要動態擷取許可權

 擷取連絡人的

 

Android讀取簡訊和連絡人

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.