一、获取短信
短信的数据库就一张表:sms
uri:“content://sms”
address | date | body | read |
已读:1 ;未读:0 |
表格中,我们关心的一般就是这4列。利用内容解析者我们能轻松获取短信,代码如下:
private ContentResolver contentResolver; private Uri uri = Uri.parse("content://sms/"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void clickQuery(View view){ contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(uri, new String[]{"address", "date", "body", "read"}, null, null, null); Log.d(TAG, "clickQuery: "+ cursor.getCount()); if (cursor != null){ while (cursor.moveToNext()){ String address = cursor.getString(0); String date = cursor.getString(1); String body = cursor.getString(2); String readCode = cursor.getString(3); if (readCode.equals("1")){ Log.d(TAG, address +"--"+ date +"--"+ body +"--"+ "已读"); }else { Log.d(TAG, address +"--"+ date +"--"+ body +"--"+ "未读"); } } } }
PS:4.4以后,非默认短信应用不再能写入短信数据库,发送和备份短信需要考虑其他方法。
二、获取联系人
联系人有contacts.db数据库,相关的表格有3张:raw_contacts表,data表,mimetypes表
整体思路:先通过raw_contacts表拿联系人contact_id,再到data表中通过联系人id(筛选条件)来拿数据data1
(1)raw_contacts表uri:"content://com.android.contacts/raw_contacts"
我们只关心一列数据:contact_id
(2)data表
|
but!! 我们查询联系人用的是view_data视图,uri:"content://com.android.contacts/data"
raw_contact_id | data1 | mimetype |
就是raw_contacts表的contact_id | 所有联系人的所有数据都放在这一列 不同联系人用raw_contact_id区分 不同数据类型用mimetype区分 |
(3)mimetypes表
我们只关心一列数据:mimetype_id。不过查询的时候时候已经被整合到了view_data视图里面,所以不再需要我们访问。
查询代码如下:
ContentResolver contentResolver = getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//查raw_contacts表 Cursor cursor = contentResolver.query(uri, new String[]{"contact_id"}, null, null, null); //查raw_contacts表,拿到contact_id列 while(cursor.moveToNext()){ String contact_id = cursor.getString(0); Log.d(TAG, "onCreate: "+contact_id); //再查data表,通过contact_id拿data1列和mimetype列 ContentResolver resolver = getContentResolver(); Uri uri1 = Uri.parse("content://com.android.contacts/data");//查data表 Cursor cursor1 = resolver.query(uri1, new String[]{"data1", "mimetype"}, "raw_contact_id=?", new String[]{contact_id}, null); while (cursor1.moveToNext()){ String data = cursor1.getString(0); String mimetype = cursor1.getString(1); Log.d(TAG, "onCreate: " +data+"---"+mimetype); } }
暂时就这么多,以后遇到再补充。