Android 联系人选择器:选择电话或电子邮件

Posted

技术标签:

【中文标题】Android 联系人选择器:选择电话或电子邮件【英文标题】:Android contact picker: pick phone or email 【发布时间】:2016-10-23 18:50:22 【问题描述】:

android 联系人选择器是否可以显示电话号码和电子邮件地址列表,用户可以选择电话或电子邮件。

我尝试了以下 Intents:

Intent.ACTION_PICK, Contacts.CONTENT_URI // - selects the entire contact
Intent.ACTION_PICK, Phone.CONTENT_URI    // - select only phones
Intent.ACTION_PICK, Email.CONTENT_URI    // - select only emails

【问题讨论】:

【参考方案1】:

已经回答了:Link to answer 但我会在这里发布代码

private void contactPicked(Intent data) 
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    cur.moveToFirst();
    try 
        // getData() method will have the Content Uri of the selected contact
        Uri uri = data.getData();
        //Query the content uri
        cur = getContentResolver().query(uri, null, null, null, null);
        cur.moveToFirst();
                                                // column index of the contact ID
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                                                // column index of the contact name 
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        txtNombreContacto.setText(name);        //print data            
                                                // column index of the phone number
        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                    new String[]id, null);
                    while (pCur.moveToNext()) 
                        String phone = pCur.getString(
                                pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        txtTelefono.setText(phone);         //print data
                     
                    pCur.close();
                                                // column index of the email   
        Cursor emailCur = cr.query(        
                ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",  
                new String[]id, null); 
            while (emailCur.moveToNext())  
                // This would allow you get several email addresses
                    // if the email addresses were stored in an array  
                String email = emailCur.getString(
                              emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));                                         
                txtMailContacto.setText(email);         //print data
         
        emailCur.close();
     catch (Exception e) 
        e.printStackTrace();
    


【讨论】:

我试图做的是配置联系人选择器以呈现允许选择电子邮件或电话号码的 UI。看来这是不可能的。我确实使用了上面的代码并创建了一个 UI 来显示从 Android 联系人选择器中选择的联系人的电子邮件和电话列表。

以上是关于Android 联系人选择器:选择电话或电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

从联系人选择器意图中选择电子邮件、姓名和电话号码

Android 多联系人选择器(可选择选择哪个电话号码)

带有复选框的 Android 联系人选择器

如何使用电子邮件和/或电话号码查询 Android 2.x 联系人?

Android 联系人选择器获取姓名 + 号码 + 电子邮件

Windows phone 8.1 使用联系人选取器检索电子邮件和电话号码