2009-12-13 7 views
6

Quelqu'un peut-il faire la lumière sur la façon d'obtenir la liste de contacts à partir d'Android ?.Liste de contacts Android

Je veux juste obtenir la même liste que dans l'application dialer. Mais je reçois beaucoup de contacts qui ne sont pas sur la liste des numéroteurs avec le code ci-dessous.

ContentResolver cr = getContentResolver(); 
Cursor cursor = cr.query(Contacts.People.CONTENT_URI, null, null, null, Contacts.ContactMethods.DEFAULT_SORT_ORDER); 
startManagingCursor(cursor); 

Merci d'avance.

Répondre

2

Ce que vous avez semble bien. Pourriez-vous élaborer sur "obtenir beaucoup de contacts qui ne figurent pas sur la liste des composeurs"? Est-ce que Android fait des gens? Ou est-ce que vous voyez des gens avec des adresses e-mail mais pas de numéros de téléphone (qui pourraient donc ne pas apparaître dans le Dialer)?

Notez que Contacts.People est pour Android 1.6 et ci-dessous. Ce fournisseur est obsolète depuis Android 2.0, remplacé par l'ensemble des fournisseurs ContactsContract.

+0

J'imagine beaucoup de développeurs n'utiliser ContactsContract parce qu'ils veulent la compatibilité 1.6 ... – Eno

0

Eh bien, merci pour la réponse d'abord. Juste pour faire la lumière sur ça.

Je voulais juste obtenir des courriels uniquement pour les contacts sur mon téléphone. Le groupe "MyContacts". J'ai vu que c'est le groupe utilise l'activité ContactList.

je fini de faire somethig comme ceci:

c = cr.query(myGroupUri, mEmailsProjection, null, null, null); 
.... 

c.close(); 

c = cr.query(
    Contacts.ContactMethods.CONTENT_URI, 
     mContactsProjection, contactIds, null, null 
); 
.... 
c.close(); 

Juste interrogé le groupe d'abord, puis la table des e-mails.

6

Essayez cet extrait:

import android.app.ListActivity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.widget.SimpleCursorAdapter; 

public class ContactList extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] {Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER}, null, null, null); 

     startManagingCursor(cursor); 

     String[] from = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER}; 

     int[] to = new int[] { R.id.name_entry, R.id.number_entry}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list_entry, cursor, from, to); 
     this.setListAdapter(adapter); 
    } 
} 
fichier XML

est:

list_entry.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="6dip"> 
     <TextView 
      android:id="@+id/name_entry" 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
     android:textSize="18dip"/> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="1" 
      android:id="@+id/number_entry" 
      android:singleLine="true" 
      android:ellipsize="marquee" 
     android:textSize="18dip"/> 
    </LinearLayout> 
+2

Nécessite sinon c'est utile. –

+1

startManagingCursor est obsolète ... – drulabs

+0

@KKD: Que devrait-il remplacer? –

1

This est mise en œuvre de l'activité de base de la liste des contacts android.

0

essayez d'utiliser l'intention d'aller à la liste des contacts

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