ContentResolver的实际应用——获取短信和联系人

14 篇文章 0 订阅
3 篇文章 0 订阅

一、获取短信

短信的数据库就一张表:sms

uri:“content://sms”

addressdatebodyread
                                                                                         已读: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表

raw_contact_id
data1                                     
mimetype_id                              
就是raw_contacts表的contact_id

所有联系人的所有数据都放在这一列

不同联系人用raw_contact_id区分

不同数据类型用mimetype_id区分

就是mimetypes表的_id列

but!! 我们查询联系人用的是view_data视图,uri:"content://com.android.contacts/data"

raw_contact_iddata1                                      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);
    }
}

暂时就这么多,以后遇到再补充。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值