ContentProvider如何获取联系人

 package comw.example.user.android2lesson_06_systemcontentprovider;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    /**
     * 调用系统提供的ContentProvider
     * 今天以获取联系人为例
     * 系统在写联系人这个app的时候,就已经提供好了联系人的ContentProvider
     * 看一下系统提供的联系人数据库
     *
     * 源码里面都有
     * raw_contacts表
     * contact_id存放联系人的id.
     *
     * data表
     * 这个表是用来存储所有的联系人的详细信息的
     * 一个联系人的信息可能分为多条数据
     * 其中比较重要的字段是数据类型,联系人id,还有数据内容
     * 其中有一个字段mime_type是数据的类型(邮箱,名字,电话...)
     *
     * mimetype表
     * 就是联系人所有的数据类型选项
     *
     * 看源码可以看出contentProvider有两个Uri,两个都是可以用的,在4.0之后只能使用分号后面的Uri,该路径是向低版本兼容的
     *
     * 如果要获取联系人的数据,该怎么做?
     * 1.获取所有联系人的id
     * 2.根据id查询到这个联系人的所有数据信息
     *
     *
     *
     *
     * @param savedInstanceState
     */


    private Button getContacts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getContacts= (Button) findViewById(R.id.getContacts);
        getContacts.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //在这里进行联系人的获取
                ContentResolver contentResolver=getContentResolver();
                //1.1获取所有的联系人id
                Cursor cursorID=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts"),new String[]{"contact_id"},null,null,null);
                if (cursorID.getCount()==0){
                    Toast.makeText(MainActivity.this,"没有联系人",Toast.LENGTH_SHORT).show();
                    return;
                }
                //2.根据id获取到每一个联系人的所有信息
                while (cursorID.moveToNext()){
                    //拿到id的字符串
                    String contactid=cursorID.getString(cursorID.getColumnIndex("contact_id"));
                    //根据id去data数据库中查询联系人的所有信息
                    Cursor contactData= contentResolver.query(Uri.parse("content://com.android.contacts/data"),new String[]{"data1","mimetype"},"raw_contact_id=?",new String[]{contactid},null);
                    //遍历获取联系人的信息
                    while (contactData.moveToNext()) {
                        //拿到数据的内容
                        String data1 = contactData.getString(contactData.getColumnIndex("data1"));
                        //拿到数据的类型
                        String mimetype = contactData.getString(contactData.getColumnIndex("mimetype"));
                        if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
                            Log.i("邮箱", data1);
                        } else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
                            Log.i("手机", data1);
                        } else if ("vnd.android.cursor.item/name".equals(mimetype)) {
                            Log.i("名字", data1);
                        }
                    }
                    //关闭游标对象释放内存
                    contactData.close();
                }
                //关闭游标对象释放内存
                cursorID.close();
                //3.添加权限允许读取ContentProvider
//                <uses-permission android:name="android.permission.READ_CONTACTS"/>
            }
        });

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值