• 04nov

    Développement-Utiliser la liste de ses contacts dans ses applications Android



    Dans ce tuto je vais développer une petite application qui affiche la liste de mes contacts sous la forme Nom=>Numéro. Ce tutoriel permet de voir comment on peut récupérer la liste de ses contacts de son téléphone.

    Après avoir créer mon projet dans eclipse, je vais donner l’autorisation à mon application d’accéder à ma liste de contact. Dans mon fichier AndroidManifest je rajoute la permission android.permission.READ_CONTACTS

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="org.com.listecontact"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".ListeContact"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
     
        </application>
        <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
    </manifest>

    Ma classe principale est une extention de la classe ListActivity pour afficher ma listview. J’ai une variable Mescontacts de type ArrayList qui contiendra la liste de mes contacts

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    public class ListeContact extends ListActivity {
    	//tableau dans lequel je range mes contacts
    	private ArrayList<String> Mescontacts;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //Methode qui récupérer mes contact
            ListContact();;
            setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Mescontacts));
        }

    .

    La méthode qui récupère mes contacts et remplit mon tableau MesContacts et La méthode ListContact(). Dans cette méthode mon objet ConnectApp de type ContentResolver qui permet de communique avec d’autres applications. J’ai mon objet uri de Type Uri dans lequel je mets l’adresse (Android) de l’application avec laquelle je vais communiquer.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
     private void ListContact() {
        	// notre tableau de contact
        	Mescontacts = new ArrayList<String>();
            // instance qui permet d'acceder au contenu d'autre application
        	ContentResolver ConnectApp = this.getContentResolver();
        	Uri uri = Contacts.People.CONTENT_URI;
             String[] projection = new String[] {People.NAME, People.NUMBER, People._ID };
            // on récupere les contacts dans un curseur
             Cursor cur = ConnectApp.query(uri, projection, null, null, null);
             this.startManagingCursor(cur);
     
             if (cur.moveToFirst()) {
                 do {
                     String name = cur.getString(cur.getColumnIndex(People.NAME));
                     String num = cur.getString(cur.getColumnIndex(People.NUMBER));
                     String id = cur.getString(cur.getColumnIndex(Contacts.People._ID));
                     Mescontacts.add(name+"=>"+num);
     
     
                 } while (cur.moveToNext());
             }
         }

    Résultat
    contactappli Développement Utiliser la liste de ses contacts dans ses applications Android Android France
    code complet

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    package org.com.listecontact;
     
    import java.util.ArrayList;
     
    import android.app.Activity;
    import android.app.ListActivity;
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.Contacts;
    import android.provider.Contacts.People;
    import android.widget.ArrayAdapter;
     
    public class ListeContact extends ListActivity {
    	//tableau dans lequel je range mes contacts
    	private ArrayList<String> Mescontacts;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            ListContact();
            setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Mescontacts));
        }
     
     
        private void ListContact() {
        	// notre tableau de contact
        	Mescontacts = new ArrayList<String>();
            // instance qui permet d'acceder au contenu d'autre application
        	ContentResolver ConnectApp = this.getContentResolver();
        	Uri uri = Contacts.People.CONTENT_URI;
             String[] projection = new String[] {People.NAME, People.NUMBER, People._ID };
            // on récupere les contacts dans un curseur
             Cursor cur = ConnectApp.query(uri, projection, null, null, null);
             this.startManagingCursor(cur);
     
             if (cur.moveToFirst()) {
                 do {
                     String name = cur.getString(cur.getColumnIndex(People.NAME));
                     String num = cur.getString(cur.getColumnIndex(People.NUMBER));
                     String id = cur.getString(cur.getColumnIndex(Contacts.People._ID));
                     Mescontacts.add(name+"=>"+num);
     
     
                 } while (cur.moveToNext());
             }
         }
     
        }



    Guy

    Co-fondateur du site Android france, senior lead developper, passionné de bière et de cigare cubain

    Twitter Google+ 

12 commentaires

  1. 11 février 2010 à 3 h 19 min

    bonjour,
    j’ai essaye votre code, il compile, mais au moment de l’execution, il est brutalement arreté.. et tous les people sont barrés (eclipse me dit que people est obsolete) quelqu’un aurai-t-il la solution?
    merci

  2. 11 février 2010 à 8 h 47 min

    @kushy tu developpes avec quelle version android quand j’ai fait ce tuto on était encore à la version 1.5 de Android

  3. 11 février 2010 à 14 h 34 min

    bonjour,

    je l’avait fait initialement avec le 2.0 puis j’ai retenté ton code avec le 1.5 et des que l’application se lance, elle se coupe brutalement.. je ne comprend vraiment pas d’ou peut venir le probleme
    merci

  4. 11 février 2010 à 14 h 40 min

    @kushy quand tu te mets en debug eclipse de donne quoi comme erreur

  5. 11 février 2010 à 15 h 02 min

    alors, il me met: ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord)line:2269
    ==> SOURCE NOT FOUND

    dans la console, il met met:
    ActivityManager: Can’t dispatch DDM chunk 46454154: no handler defined

    et dans le logcat:
    java.lang.RuntimeException: your content must have a ListView whose id attribute is ‘android.R.id.list’

  6. 11 février 2010 à 16 h 02 min

    c bon, j’ai resolu mon probleme,
    merci beaucoup pour ton temps :)

  7. 11 février 2010 à 16 h 05 min

    @kushy c’est quoi donc la solution??

  8. 27 avril 2010 à 16 h 03 min

    merci pour le code, il m’a aidé à surmonter mon pb mais dans le fichier layout/main.xml, il faut rajouter dans la linearLayout:

  9. 31 mai 2010 à 17 h 20 min

    Rajouter dans le layout mais quoi exactement ? :)

Laissez un commentaire

     Vous devez être identifié pour publier un commentaire.
     Connexion - Inscription