Elige un número y un nombre de la lista de contactos en la aplicación de Android

Quiero elegir un contacto con su número de mi lista de contactos. Leí muchas soluciones e investigaciones durante un par de semanas, pero todos los artículos no funcionaron correctamente. algunos códigos como los siguientes:

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

// y en activityresult:

 if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor c = managedQuery(contactData, null, null, null, null); if (c.moveToFirst()) { String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); tv1.setText(name); } } 

o este código para obtener todos los contactos pero no puedo tener la cantidad de contactos:

 String[] contacts = new String[] {People.NAME, People.NUMBER}; Uri contentUri = People.CONTENT_URI; Cursor cursor = managedQuery(contentUri, contacts, null, null, null); String textContacts = ""; if (cursor.moveToFirst()) { String myname = null; String mynumber = null; do { textContacts = textContacts + cursor.getString(cursor.getColumnIndex(People.NAME)) + " : " + cursor.getString(cursor.getColumnIndex(People.NUMBER)) + "\n"; } while (cursor.moveToNext()); tv1.setText(textContacts); } 

¿Alguien puede ayudarme, por favor? mi android es 2.3.3

Intenta seguir el código que te ayudará a:

  // You need below permission to read contacts  // Declare static final int PICK_CONTACT=1; Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT); //code @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); 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(); cNumber = phones.getString(phones.getColumnIndex("data1")); System.out.println("number is:"+cNumber); } String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); } } break; } } 

Use Intent.ACTION_PICK para acceder al contacto telefónico. Código como

 Uri uri = Uri.parse("content://contacts"); Intent intent = new Intent(Intent.ACTION_PICK, uri); intent.setType(Phone.CONTENT_TYPE); startActivityForResult(intent, REQUEST_CODE); 

Dónde

 private static final int REQUEST_CODE = 1; 

Y use el método en ActivityResult () para acceder al contacto seleccionado. Código como

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_OK) { Uri uri = intent.getData(); String[] projection = { Phone.NUMBER, Phone.DISPLAY_NAME }; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); cursor.moveToFirst(); int numberColumnIndex = cursor.getColumnIndex(Phone.NUMBER); String number = cursor.getString(numberColumnIndex); int nameColumnIndex = cursor.getColumnIndex(Phone.DISPLAY_NAME); String name = cursor.getString(nameColumnIndex); Log.d(TAG, "ZZZ number : " + number +" , name : "+name); } } }; 

Agregue un permiso para leer datos de contactos en el manifiesto de su aplicación.

  

Usa Intent.Action_Pick en tu actividad como a continuación

 Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

A continuación, anule el onActivityResult()

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // check whether the result is ok if (resultCode == RESULT_OK) { // Check for the request code, we might be usign multiple startActivityForReslut switch (requestCode) { case RESULT_PICK_CONTACT: Cursor cursor = null; try { String phoneNo = null ; String name = null; Uri uri = data.getData(); cursor = getContentResolver().query(uri, null, null, null, null); cursor.moveToFirst(); int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); phoneNo = cursor.getString(phoneIndex); textView2.setText(phoneNo); } catch (Exception e) { e.printStackTrace(); } break; } } else { Log.e("MainActivity", "Failed to pick contact"); } } 

Esto funcionará verificarlo

Esto es lo que implementé:

 private String[] getContactList(){ ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); Log.i(LOG_TAG, "get Contact List: Fetching complete contact list"); ArrayList contact_names = new ArrayList(); if (cur.getCount() > 0) { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); if (cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER.trim())).equalsIgnoreCase("1")) { if (name!=null){ //contact_names[i]=name; Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); while (pCur.moveToNext()) { String PhoneNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); PhoneNumber = PhoneNumber.replaceAll("-", ""); if (PhoneNumber.trim().length() >= 10) { PhoneNumber = PhoneNumber.substring(PhoneNumber.length() - 10); } contact_names.add(name + ":" + PhoneNumber); //i++; break; } pCur.close(); pCur.deactivate(); // i++; } } } cur.close(); cur.deactivate(); } String[] contactList = new String[contact_names.size()]; for(int j = 0; j < contact_names.size(); j++){ contactList[j] = contact_names.get(j); } return contactList; } 

Puede llamar a esta función y tal vez usar AutoCompleteTextView para visualizar y seleccionar el nombre del contacto y el número de 10 dígitos. Esta función devuelve una matriz de cadenas. Puede devolver directamente la lista de arreglos y eliminar el último ciclo for.

Si desea elegir un contacto de la lista de contactos al hacer clic o enfocar evento, copie este código y pegue Su actividad.

  • EVENTO DE ENFOQUE DE EDITAR TEXTO:

      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 } }); 
  • UNA FUNCIÓN PARA OBTENER EL NOMBRE DEL CONTACTO Y EL TELÉFONO NO ES:

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

    }

intenta seguir el código,

 Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts._ID); startActivityForResult(intent, PICK_CONTACT); public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == PICK_CONTACT) { Cursor cursor = managedQuery(Email.CONTENT_URI, null, Email.CONTACT_ID + " = " + intent.getData(), null, null); cursor.moveToNext(); String contactId = cursor.getString(cursor.getColumnIndex(Email._ID)); String name = cursor.getString(cursor.getColumnIndexOrThrow(Email.DATA1)); Toast.makeText(this, "Contect LIST = "+name, Toast.LENGTH_LONG).show(); } } 
  • Artículo de lista

este trabajo para mi

obtener el número de teléfono móvil Y el nombre

  startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), TYPE_CONTACT); 

case TYPE_CONTACT: uriContact = data.getData ();

  String name=retrieveContactName(); System.out.println("name = " + name); String number=retrieveContactNumber(); System.out.println("number = " + number); break; 

}}

private String retrieveContactNumber () {

  String contactNumber = null; // getting contacts ID Cursor cursorID = getContentResolver().query(uriContact, new String[]{ContactsContract.Contacts._ID}, null, null, null); if (cursorID.moveToFirst()) { contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); } cursorID.close(); Log.d(TAG, "Contact ID: " + contactID); // Using the contact ID now we will get contact phone number Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + ContactsContract.CommonDataKinds.Phone.TYPE + " = " + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, new String[]{contactID}, null); if (cursorPhone.moveToFirst()) { contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } cursorPhone.close(); Log.d(TAG, "Contact Phone Number: " + contactNumber); return contactNumber; } private String retrieveContactName() { String contactName = null; // querying contact data store Cursor cursor = getContentResolver().query(uriContact, null, null, null, null); if (cursor.moveToFirst()) { // DISPLAY_NAME = The display name for the contact. // HAS_PHONE_NUMBER = An indicator of whether this contact has at least one phone number. contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); } cursor.close(); Log.d(TAG, "Contact Name: " + contactName); return contactName; } 

obtener el número de teléfono móvil y la dirección de correo electrónico

// Obtener número de teléfono

  name = getIntent().getExtras().getString("name"); id = getIntent().getExtras().getString("contactid"); Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + ContactsContract.CommonDataKinds.Phone.TYPE + " = " + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, new String[]{id.toString()}, null); String contactNumber = null; if (cursorPhone.moveToFirst()) { contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); System.out.println("contactnum"+contactNumber); } } cursorPhone.close(); 

// Obtener dirección de correo electrónico

  Cursor emailCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null); if (emailCursor.moveToFirst()) { String phone = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); int type = emailCursor.getInt(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); String s = (String) ContactsContract.CommonDataKinds.Email.getTypeLabel(AddContactActivity.this.getResources(), type, ""); etEmail.setText(phone); } emailCursor.close(); } 

Este código funcionará para los contactos de número de teléfono móvil, no para correo electrónico o algo así. Encontré este código más simple. avísame si hay algún problema.

iniciar actividad con intención de selección en el tipo de datos del teléfono:

 findViewById(R.id.choose_contact_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent pickContact = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(pickContact, PICK_CONTACT_REQUEST); } }); 

Ahora establezca en el resultado de la actividad ();

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent){ switch (requestCode){ case PICK_CONTACT_REQUEST: if (resultCode == RESULT_OK){ Uri contactUri = intent.getData(); Cursor nameCursor = getContentResolver().query(contactUri, null, null, null, null); if (nameCursor.moveToFirst()){ String name = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String number = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); ((EditText)findViewById(R.id.person_name)).setText(name); ((EditText)findViewById(R.id.enter_mobile)).setText(number); nameCursor.close(); } } break; } } 

Sin permisos de tiempo de manifiesto o de ejecución, puede probar esto.

Para recoger el nombre y el número de contacto tanto desde la aplicación de contactos. Con este código, la aplicación de contacto también mostrará el número debajo del nombre del contacto.

El código es elegir solo un nombre y número de la aplicación de contactos.

 private void openContactSelectionIntent() { Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(Intent.createChooser(intent, "Select Contact"), RC_SELECT_CONTACT); } 

Y aquí está el código del método de onActivityResult de actividad

 Uri uri1 = data.getData(); Cursor c = managedQuery(uri1, null, null, null, null); if (c.moveToFirst()) { String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); System.out.println("name is: " + name); } Cursor cursor = getContentResolver().query(uri1, null, null, null, null); if (null == cursor) return; try { while (cursor.moveToNext()) { String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); System.out.println("number is "+number); } }catch (Exception e){ e.printStackTrace(); }finally { cursor.close(); } 

Esto puede ayudarte:

 public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); try { if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor cur = managedQuery(contactData, null, null, null, null); ContentResolver contect_resolver = getContentResolver(); if (cur.moveToFirst()) { String id = cur.getString(cur.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String name = ""; String no = ""; Cursor phoneCur = contect_resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); if (phoneCur.moveToFirst()) { name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); no = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } Log.e("Phone no & name :***: ", name + " : " + no); txt.append(name + " : " + no + "\n"); id = null; name = null; no = null; phoneCur = null; } contect_resolver = null; cur = null; // populateContacts(); } } catch (IllegalArgumentException e) { e.printStackTrace(); Log.e("IllegalArgumentException::", e.toString()); } catch (Exception e) { e.printStackTrace(); Log.e("Error :: ", e.toString()); } }