標籤: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讀取簡訊和連絡人