【问题标题】:How would I also be able to get the phone number from the contact the user picked?我怎样才能从用户选择的联系人中获取电话号码?
【发布时间】:2016-08-08 17:48:45
【问题描述】:

我能得到用户选择的联系人姓名,但不能得到电话号码

onclick

Intent intent = new Intent(Intent.ACTION_PICK,            
ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent,PICK_CONTACT);

PICK_CONTACT 只是一个 int 值,它等于我的请求代码

然后:

@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);
    if (reqCode == PICK_CONTACT) {
        if (resultCode == AppCompatActivity.RESULT_OK) {

            Uri contactData = data.getData();

            Cursor c = getContentResolver().query(contactData, null, null, null, null);
            if (c.moveToFirst()) {
                String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                     contactadder.setText(name);


                c.close();

            }

【问题讨论】:

    标签: java android onactivityresult


    【解决方案1】:

    这是我工作的一些小插曲,也许可以帮助您找到正确的方向。 Android 数据库交互的文档记录很差,很难找到正确的方式/值。如果您需要更多帮助来理解,请回复。我删除了一些业务相关的数据,所以不会这样编译。只是为了方便发布!

    public static final String[] PROJECTION ={
    
                    ContactsContract.Data.MIMETYPE,
                    ContactsContract.Data.DATA1,
                    ContactsContract.Data.DATA2,
                    ContactsContract.Data.DATA3,
                    ContactsContract.Data.DATA4,
                    ContactsContract.Data.DATA5,
                    ContactsContract.Data.DATA6,
                    ContactsContract.Data.DATA7,
                    ContactsContract.Data.DATA8,
                    ContactsContract.Data.DATA9,
                    ContactsContract.Data.DATA10,
                    ContactsContract.Data.DATA11,
                    ContactsContract.Data.DATA12,
                    ContactsContract.Data.DATA13,
                    ContactsContract.Data.DATA14,
                    ContactsContract.Data.DATA15
            };
    
    private static final int MIMETYPE_COLUMN=0;
    private static final int DATA_COLUMN=1;
    private static final int DATATYPE_COLUMN=2;
    
    private static final String SELECTION = ContactsContract.Data.CONTACT_ID + " = ?";
    
    public static ContactWrapper localContact(long contactId){
    
        Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,PROJECTION, SELECTION, new String[]{String.valueOf(contactId)}, null);
    
        ContactWrapper wrapper = new ContactWrapper(contact);
        if(cursor==null){
            return wrapper;
        }
        while(cursor.moveToNext()){
    
            String mime=cursor.getString(MIMETYPE_COLUMN);
            if (mime.equals(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)) {
                contact.setU8sDisplayName(cursor.getString(DATA_COLUMN));
    
            } else if (mime.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
                putPhoneNumber(contact, cursor);
    
            } else if (mime.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
                putEmail(contact, cursor);
    
            } else if (mime.equals(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
                putAddress(contact, cursor);
    
            }else if (mime.equals(ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE)) {
                contact.setU8sSIPAddress(cursor.getString(DATA_COLUMN));
            }else if (mime.equals(ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)) {
                wrapper.setImageBinaryString(getContactPhotoBase64(contactId));
            }
    
        }
        cursor.close();
        return wrapper;
    }
    private static void putPhoneNumber(ContactWrapper contact,Cursor data){
    
        switch (data.getInt(DATATYPE_COLUMN)){
            case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                contact.setU8sPhoneHome(data.getString(DATA_COLUMN));
                break;
            case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                contact.setU8sPhoneMobile(data.getString(DATA_COLUMN));
                break;
            case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                contact.setU8sPhoneBusiness(data.getString(DATA_COLUMN));
                break;
    
        }
    
    }
    

    【讨论】:

    • 我只是希望能够获得用户点击的联系人的号码和姓名,我得到了您所看到的姓名,但不应该只有一两行代码还要得到那个联系人的号码吗?我可以坚持我的 if 语句@Henning
    • 但正如您所见,一个联系人通常没有多个“the”号码。另外,您很幸运,第一行包含名称,这也不确定。尝试遍历您的结果集并打印行的列。也许你可以看到你需要什么
    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多