2009-12-13 16 views
6

Qualcuno può far luce su come ottenere l'elenco dei contatti da Android ?.Elenco contatti Android

Voglio solo ottenere la stessa lista come nell'app Dialer. Ma sto ricevendo molti contatti che non sono nella lista dialer con il codice qui sotto.

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

Grazie in anticipo.

risposta

2

Quello che hai sembra bene. Potresti approfondire "ottenere un sacco di contatti che non si trovano nell'elenco dei dialer"? È che Android sta inventando le persone? Oppure vedete persone con indirizzi e-mail ma senza numeri di telefono (che potrebbero quindi non apparire nel Dialer)?

Nota che Contacts.People è per Android 1.6 e versioni successive. Quel provider è deprecato a partire da Android 2.0, sostituito dal set di provider ContactsContract.

+0

immagino un sacco di sviluppatori non utilizzerà ContactsContract perché vogliono 1,6 compatibilità ... – Eno

0

Bene, grazie per la risposta. Solo per far luce su questo.

Volevo solo ricevere e-mail solo per i contatti sul mio telefono. Il gruppo "MyContacts". Ho visto che questo è il gruppo che ContactList utilizza.

ho finito di fare somethig come questo:

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

c.close(); 

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

Proprio interrogato il gruppo e poi il tavolo messaggi di posta elettronica.

6

Prova questo frammento:

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

file XML è:

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

Richiede altrimenti è utile. –

+1

startManagingCursor è obsoleto ... – drulabs

+0

@KKD: Cosa dovrebbe sostituirlo? –

1

This è la realizzazione di base di Android lista dei contatti di attività.

0

provare a utilizzare l'intenzione di andare alla lista dei contatti

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