调用自带的联系人并选择其中一个号码

zrx199210 2016-07-18 12:59:37

求助各位前辈,请问调用系统联系人并得到选中的号码是怎么做的,类似于京东收货地址中的选择联系人功能,如上图。
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, ACTION_CHOOSE_CONTACT)


用以上代码可以调用系统联系人界面,并且遇到联系人有多个号码的时候可以弹出对话框选择号码,但是我不知道怎么获取选择到的号码,请各位前辈帮帮忙
...全文
96 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2016-07-18
  • 打赏
  • 举报
回复
先打开选择联系人选择一个联系人使用如下代码

Intent pickContacts = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(pickContacts, REQUEST_CONTACTS);
然后根据选择的联系人在onActivityResult获取联系人信息

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode != Activity.RESULT_OK) return;
        if(requestCode == REQUEST_CONTACTS && data != null){
            Uri contactUri = data.getData();
            //在返回的Data中获取联系人姓名及ID
            String[] queryFields = new String[]{ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts._ID};
            Cursor cursor = getContentResolver().query(contactUri, queryFields, null, null, null);
            if (cursor!=null) {
                try {
                    if (cursor.getCount() == 0) {
                        return;
                    }
                    cursor.moveToFirst();
                    suspect = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    suspectId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));

                } finally {
                    cursor.close();
                }
            }
        }
    }
最后根据id查询该联系人的信息

                Cursor numberCursor = null;
                try {
                    //直接通过ContentResolver从ContactsContract.CommonDataKinds.Phone中查询
                    numberCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + suspectId,
                            null, null);
                    //然而这里怎么都查询不到,原因ContactsContract.CommonDataKinds.Phone表中id
                    //与mCrime中ID(也就是从ACTION_PICK返回的表中查出来的ID)对不上
                    if (numberCursor == null || numberCursor.getCount() == 0) {
                        Toast.makeText(this, "该联系人不存在于你的电话簿中", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    numberCursor.moveToFirst();
                    String phoneNumber = numberCursor.getString(0);

                    Uri numberUri = Uri.parse("tel:" + phoneNumber);
                    Intent pickContacts = new Intent(Intent.ACTION_DIAL, numberUri);
                    startActivity(pickContacts);
                }finally {
                    if (numberCursor!=null)numberCursor.close();
                }
大致流程就是这样

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧