Android 选择系统联系人并读取联系人数据

Android 选择系统联系人并读取联系人数据

昨天写了两个demo,利用 ContentProvider 和 ContentResolver 实现app之间的类似于数据共享的效果

今天写了一个 尝试获取系统联系人,选择后返回单个联系人数据的demo


作为这样一个demo的大概思路是:
1、点击按钮,跳转到系统联系人界面
2、选择联系人,然后返回到之前的Activity中
3、将选择的联系人信息展示到页面上

1、首先我们要先跳转到系统通讯录

    public void sendContacts(View view){
        Uri uri = Uri.parse("content://contacts/people");
        Intent intent = new Intent(Intent.ACTION_PICK,uri);
        startActivityForResult(intent,0);
    }

通过设置Uri跳转到系统通讯录,可以看到使用了回调函数实现

2、重写onActivityResult方法,获取数据

/**
     * 跳转联系人列表的回调函数
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
            case 0:
                if (data==null){
                    return;
                }
                //处理返回后的data,获取选择的联系人信息
                Uri uri = data.getData();
                String contact[] = getContacts(uri);
                //展示至控件上
                tv_main_name.setText(contact[0]);
                tv_main_number.setText(contact[1]);
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

在该方法中的getContacts(uri),对回调拿到的数据做了处理,拿到我需要的联系人和号码

 private String[] getPhoneContacts(Uri uri){
        String contact[] = new String[2];
        //得到电话本中开始一项的光标
        Cursor cursor = cr.query(uri,null,null,null,null);
        //拿到了光标数据
        if (cursor!=null){
            //获取第一条
            cursor.moveToFirst();
            //获取联系人姓名
            contact[0] = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            //获取联系人号码
            //1:先获取id
            String contactId = cursor.getString(cursor.getColumnIndex("_id"));
            //2:根据id查询data表中的数据
            Cursor cursorData = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId,null,null);
            if (cursorData!=null){
                cursorData.moveToFirst();
                contact[1] = cursorData.getString(cursorData.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            }
        }
        return contact;
    }

该方法带了一个路径的参数,根据该路径可以拿到选中的联系人

然后查询联系人的id,在继续根据id查询联系人的号码,最后将需要的值返回出去

最后的最后,将值绑定在页面上


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值