在Android中,如何选择联系人并在我的应用程序上显示它?

时间:2010-09-30 11:43:24

标签: android contacts

我是android的初学者,我正在构建一个应用程序,当用户按下按钮时,会显示存储在移动设备中的联系人。当他从中选择联系人时,我必须获取所选的联系人姓名和号码。我尝试使用代码,但只显示所选联系人的姓名,而不是电话号码。

public void readcontact(){
    try {
        Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people"));
        startActivityForResult(intent, PICK_CONTACT);
    } catch (Exception e) {
            e.printStackTrace();
      }
}

public void onActivityResult(int reqCode, int resultCode, Intent data) {
      super.onActivityResult(reqCode, resultCode, data);

      switch (reqCode) {
        case (PICK_CONTACT) :
          if (resultCode == Activity.RESULT_OK) {
              Uri contactData = data.getData();
                Cursor c =  managedQuery(contactData, null, null, null, null);
                startManagingCursor(c);
                if (c.moveToFirst()) {
                  String name = c.getString(c.getColumnIndexOrThrow(People.NAME));  
                  String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER));
                  perrsonname.setText(name);
                  Toast.makeText(this,  name + " has number " + number, Toast.LENGTH_LONG).show();
                 }
           }
         break;
      }

  }

我甚至需要所选联系人的附加号码(家庭,办公室等),  任何人都可以帮我解决这个问题。对此的建议很明显。

6 个答案:

答案 0 :(得分:2)

  public void readcontact(){ 
    try { 
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                PhoneLookup.CONTENT_FILTER_URI); // creates the contact list intent
        contactPickerIntent.setType(Contacts.Phones.CONTENT_TYPE); // selects contacts with phone only
        startActivityForResult(contactPickerIntent, PICK_CONTACT); 

    } catch (Exception e) { 
            e.printStackTrace(); 
    } 
} 

public void onActivityResult(int reqCode, int resultCode, Intent data) { 
      super.onActivityResult(reqCode, resultCode, data); 

      switch (reqCode) { 
        case (PICK_CONTACT) : 
          if (resultCode == Activity.RESULT_OK) { 
              Uri contactData = data.getData(); // has the uri for picked contact
                Cursor c = getContentResolver().query(contactData, null, null, null, null); // creates the contact cursor with the returned uri
                if (c.moveToFirst()) { 
                   String name = c..getString(c.getColumnIndex(PhoneLookup.DISPLAY_NAME));
                   String number = c.getString(c.getColumnIndex(PhoneLookup.NUMBER));
                   Toast.makeText(this,  name + " has number " + number, Toast.LENGTH_LONG).show(); 
                 } 
           } 
         break; 
      } 

  } 

答案 1 :(得分:2)

在这里,我将向您演示如何从点击或焦点事件的联系人列表中选择联系人号码和姓名,

焦点事件: -

     phoneNo.setOnFocusChangeListener(new OnFocusChangeListener()
      {   public void onFocusChange(View v, boolean hasFocus) 
          {
             Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
             startActivityForResult(intent,PICK_CONTACT );//PICK_CONTACT is private static final int, so declare in activity class
       } });
  • 获取联系人姓名和电话的功能:

      public void onActivityResult(int reqCode, int resultCode, Intent data)
       {
         super.onActivityResult(reqCode, resultCode, data);
    
            switch(reqCode){
               case (PICK_CONTACT):
                 if (resultCode == Activity.RESULT_OK)
                 {
                     Uri contactData = data.getData();
                     Cursor c = managedQuery(contactData, null, null, null, null);
                  if (c.moveToFirst()) {
                  String id =   
                    c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
    
                  String hasPhone =
                  c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
    
                  if (hasPhone.equalsIgnoreCase("1")) {
                 Cursor phones = getContentResolver().query( 
                              ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                              ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, 
                              null, null);
                    phones.moveToFirst();
                    String phn_no = phones.getString(phones.getColumnIndex("data1"));
                    String name = c.getString(c.getColumnIndex(StructuredPostal.DISPLAY_NAME));
                   Toast.makeText(this, "contact info : "+ phn_no+"\n"+name, Toast.LENGTH_LONG).show();
    
                  }
                    }
                 }
            }
    

    }

答案 2 :(得分:0)

请参阅Android Source附带的联系人应用程序

答案 3 :(得分:0)

Intent intent1 = new Intent(Intent.ACTION_PICK, Contacts.Phones.CONTENT_URI);
            startActivityForResult(intent1, PICK_CONTACT_RQCODE_OLD);
            startActivity(intent1);

这适用于我的实施。

答案 4 :(得分:0)

以无忧无虑的方式提供所选联系人的所有电话号码


启动联系活动,

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

startActivityForResult(intent,PICK_CONTACT);

现在使用以下内容获取所有数据,

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data){
    super.onActivityResult(reqCode, resultCode, data);

    switch(reqCode){
       case (PICK_CONTACT):
         if (resultCode == Activity.RESULT_OK){
             Uri contactData = data.getData();
             Cursor c = managedQuery(contactData, null, null, null, null);
             ContentResolver cr = getContentResolver();

             if (c.moveToFirst())
             {
                 try
                 {
                     String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                     String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                     if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
                     {
                        Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                        null, 
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                        new String[]{id}, null);
                        String phone = "";
                        while (pCur.moveToNext()) 
                        {
                            try
                            {
                                phone = phone + pCur.getString(pCur.getColumnIndex(ContactsContract.Contacts.Data.DATA1)) + ",";
                            }
                            catch(Exception ex)
                            {

                            }
                        } 
                        pCur.close();
                        if(phone.length() > 0)
                        {
                            phone = phone.substring(0,phone.length()-1);
                        }
                        txtPhone.setText(phone);
                     }
                     txtName.setText(name); 
                 }
                 catch(Exception ex)
                 {
                     Toast.makeText(AddToInnerCircle.this, "No name selected", Toast.LENGTH_SHORT).show();
                 }
             }
         }
    }
}

答案 5 :(得分:0)

最简单的方法我找到了一个电话号码联系人,并显示显示名称和所选的电话号码。另见:full, executable example as gist

private final static int PICK_CONTACT = 0;

private void pickContact() {
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

    // Show only contacts with phone number. (Also forces user to choose ONE 
    // phone number for a contact that has several.)
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);

    startActivityForResult(intent, PICK_CONTACT);
}

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);
    switch (reqCode) {
        case (PICK_CONTACT):
            if (resultCode == Activity.RESULT_OK) {
                handleSelectedContact(data);
            }
            break;
    }
}

private void handleSelectedContact(Intent intent) {
    Uri contactUri = intent.getData();
    Cursor c = getContentResolver().query(contactUri, null, null, null, null);
    if (c.moveToFirst()) {
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String selectedPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.Entity.DATA1));

        String message = String.format("Name %s, selected phone %s", name, selectedPhone);
        Snackbar.make(contentView, message, Snackbar.LENGTH_LONG).show();
    }
    c.close();
}

如果您需要其他字段,例如电话号码和电子邮件,请查看answers in this question