簡體   English   中英

在 Android 中,如何選擇聯系人並將其顯示在我的應用程序上?

[英]In Android, how to pick a contact and display it on my app?

我是 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;
      }

  }

我什至需要所選聯系人的附加號碼(家庭、辦公室等),任何人都可以幫我解決這個問題。 這方面的建議是可觀的。

  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; 
      } 
 
  } 

在這里,我將向您展示如何在單擊或焦點事件時從聯系人列表中選擇聯系人編號和姓名,

焦點事件:-

     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(); } } } }

    }

這以輕松的方式提供了所選聯系人的所有電話號碼


開始聯系活動,

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

startActivityForResult(意圖,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();
                 }
             }
         }
    }
}

我發現的最簡單的方法是選擇帶有電話號碼的聯系人,並顯示顯示名稱和選定的電話號碼。 另請參閱: 完整的可執行示例作為 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();
}

如果您需要其他字段,例如電話號碼和電子郵件,請查看此問題中的答案

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

這適用於我的實現。

請參閱 Android 源附帶的聯系人應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM