2010-11-09 18 views
17

quiero conseguir los contactos guardados en el teléfono sólo no contactos SIM usando nuevas contactContracts api¿Cómo conseguir los contactos del teléfono en Android

que estoy haciendo esta filtrando Tipo de cuenta (no com.anddroid.contacts.sim), este funciona para un teléfono (HTC Desire), pero no hay ningún tipo de cuenta común encontrado que puede funcionar para todos los terminales inalámbricos puede alguien decirme cómo hacerlo

+0

¿No puedes filtrar por 'DeviceOnly' Tipo de cuenta? – systempuntoout

+0

Eche un vistazo a la respuesta aceptada en la siguiente pregunta: [Cómo obtener todos los contactos de Android, pero sin los que están en la tarjeta SIM] (http://stackoverflow.com/questions/4338563/how-to-get-all-android -contactos-pero-sin-aquellos-que-están-en-sim) También puede ver la siguiente respuesta: [¿Encontrar la naturaleza de la cuenta de un grupo de contacto?] (http://stackoverflow.com/questions/4614089/finding -count-nature-of-a-contact-group/4634729 # 4634729) Creo que los enlaces anteriores pueden ayudarlo a lograr lo que desea. –

+0

también podría probar esta biblioteca según la necesidad de buscar el contacto [Proyecto Github] (https://github.com/nitiwari-dev/android-contact-extractor) – nitesh

Respuesta

1

es posible que desee ver en ContentProvider s para el ContactsProvider.

El ContentProvider tutorial incluso utiliza contactos como un ejemplo:

la URI de la tabla que coincide con los números de teléfono de las personas y el URI de la tabla que contiene imágenes de personas (ambas controladas por los contactos de proveedor de contenidos) son:

android.provider.Contacts.Phones.CONTENT_URI 
android.provider.Contacts.Photos.CONTENT_URI 

Dmitri Plotnikov tiene algunas cosas muy útiles que decir en este Google Group thread.

+1

gracias por responder, pero solo necesito contactos telefónicos y android.provider. Contacts.Phones.CONTENT_URI tabla me da contactos de ambos teléfonos y sim y también esto está privado Quiero usar ContactsContract.Contacts api –

+0

El enlace que ha proporcionado ya no funciona –

0

Puede probar el siguiente código, tengo los detalles necesarios: los

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null, null,null); 
while (cursor.moveToNext()) { 
    listName.add(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); 
    listContactId.add(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); 
    if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {     
     Cursor pCur = getContentResolver().query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)),null, null); 
     while (pCur.moveToNext()) { 
      listMobileNo.add(pCur.getString(pCur.getColumnIndex("DATA1"))); 
     } 
     pCur.close(); 
    } else 
     listMobileNo.add(""); 
}    
+0

cursor es moderadamente ineficiente. –

0

Debe añadir androide uses_permission: name = "android.permission.READ_CONTACTS Finalmente, se leen los contactos como abajo:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    while (cursor.moveToNext()) { 
     String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

    } 
27

dar permiso en el archivo de manifiesto "android.permission.READ_CONTACTS"

sólo tienes que copiar el código y los contactos se muestran en Logcat

public class GetContactsDemo extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_getcontactsdemo); 
     readContacts(); 
    } 

    public void readContacts(){ 
     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
       null, null, null, null); 

     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 (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
        System.out.println("name : " + name + ", ID : " + id); 

        // get 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)); 
          System.out.println("phone" + phone); 
        } 
        pCur.close(); 


        // get email and type 

        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.DATA)); 
         String emailType = emailCur.getString(
             emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 

         System.out.println("Email " + email + " Email Type : " + emailType); 
        } 
        emailCur.close(); 

        // Get note....... 
        String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] noteWhereParams = new String[]{id, 
        ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE}; 
          Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null); 
        if (noteCur.moveToFirst()) { 
         String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); 
         System.out.println("Note " + note); 
        } 
        noteCur.close(); 

        //Get Postal Address.... 

        String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] addrWhereParams = new String[]{id, 
         ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
        Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, 
           null, null, null, null); 
        while(addrCur.moveToNext()) { 
         String poBox = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX)); 
         String street = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); 
         String city = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); 
         String state = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); 
         String postalCode = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); 
         String country = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); 
         String type = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); 

         // Do something with these.... 

        } 
        addrCur.close(); 

        // Get Instant Messenger......... 
        String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] imWhereParams = new String[]{id, 
         ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE}; 
        Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI, 
          null, imWhere, imWhereParams, null); 
        if (imCur.moveToFirst()) { 
         String imName = imCur.getString(
           imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); 
         String imType; 
         imType = imCur.getString(
           imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE)); 
        } 
        imCur.close(); 

        // Get Organizations......... 

        String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] orgWhereParams = new String[]{id, 
         ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
        Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI, 
           null, orgWhere, orgWhereParams, null); 
        if (orgCur.moveToFirst()) { 
         String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); 
         String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); 
        } 
        orgCur.close(); 
       } 
      } 
     } 
    } 

} 
+1

No olvide agregar este permiso "android.permission.READ_CONTACTS" –

+0

@Kleopatra ¿Puede ayudarme a obtener contactos sim.? El código anterior funciona solo para contactos telefónicos. –

+0

Si tiene alguna pregunta, publique un ... [pregunta] (http://stackoverflow.com/questions/ask) :-) Personalmente, no puedo ayudarlo, no tengo experiencia en el área. – kleopatra

Cuestiones relacionadas