Pour n’afficher que les contacts avec des numéros de téléphone et récupérer le numéro et le nom du contact :
On affiche tous les contacts :
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(intent, 9999);
Et on récupère le numéro du contact sélectionné dans le OnResult :
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (9999):
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor cur = this.getContentResolver().query(contactData, null, null, null, null);
if (cur == null) return;
try {
if (cur.moveToFirst()) {
int phoneName = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String sname = cur.getString(phoneName);
int phoneIndex = cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
Log.d("Phonexxx", cur.getString(phoneIndex)+" "+sname);
infos.setText("Contact = "+"\n"+sname+"\n"+cur.getString(phoneIndex));
}
} finally {
cur.close();
}
}
}
}
Ne pas oublier d’ajouter la permission read contacts dans le manifest :
uses-permission android:name="android.permission.READ_CONTACTS"
Pour récupérer les contacts du téléphone :
private void getContacts(Context cont)
{Uri uri;
Cursor cursor;
String number, sNom, sMail, sNomProfile, sortOrder;
int type;
/*
uri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
//-- Récupération du contact propriétaire du téléphone
cursor = getContentResolver().query(uri, new String[]{
ContactsContract.Profile.DISPLAY_NAME,
},
null, null, null);
cursor.moveToFirst();
do{
sNomProfile = cursor.getString(cursor.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME));
tData.add("propriétaire = "+sNomProfile);
}while(cursor.moveToNext());
*/
sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
cursor = getContentResolver().query(uri, new String[]{
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER,
},
null, null, sortOrder);
cursor.moveToFirst();
do{
if (cursor.getString(4)!="0")
{number = cursor.getString(0);
sNom = cursor.getString(2).toUpperCase();
type = cursor.getInt(1);
sNom.replace(':',';');
//sMail=getEmail(this,cursor.getLong(3));
//if (sNom.toUpperCase().equals(sNomProfile.toUpperCase()))
// tData.add("USER.... ; "+number+" :"+sMail);
//else
// tData.add(sNom+" ; "+numbe+" ; "+sMail);}
contacts.add(sNom);
numcontacts.add(number);}
}while(cursor.moveToNext());
cursor.close();
}
Pour récupérer la liste des contacts filtrée sur un nom :
String sPrenom="ver";
sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
cursor = cont
.getContentResolver()
.query(uri,
new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER, },
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+ " like ?",
new String[]{"%" + sPrenom + "%"}, sortOrder);
cursor.moveToFirst();
Pour afficher la liste des contacts via Intent :
//-- Read Contact
public void readContact(){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, Var_result);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case Var_result:
handleContactSelection(data);
break;
}
}
}
////
private void handleContactSelection(Intent data) {
if (data != null) {
Uri uri = data.getData();
if (uri != null) {
Cursor cursor = null;
Cursor nameCursor = null;
try {
cursor = getContentResolver().query(uri, new String[]{
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID},
null, null, null);
String phoneNumber = null;
String contactId = null;
if (cursor != null && cursor.moveToFirst()) {
contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
String givenName = null;///first name.
String familyName = null;//last name.
String projection[] = new String[]{ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME};
String whereName = ContactsContract.Data.MIMETYPE + " = ? AND " +
ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = ?";
String[] whereNameParams = new String[]{ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contactId};
nameCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
projection, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
if (nameCursor != null && nameCursor.moveToNext()) {
givenName = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
if (givenName==null)
givenName="";
familyName = nameCursor.getString(nameCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
if (familyName==null)
familyName="";
}
Toast.makeText(this, givenName + " / " + familyName + " : " + phoneNumber, Toast.LENGTH_LONG).show();
//***** Appel d'une fonction *****
} finally {
if (cursor != null) {
cursor.close();
}
if (nameCursor != null) {
nameCursor.close();
}
}
}
}
}
Références :
http://stackoverflow.com/questions/10117049/get-only-email-address-from-contact-list-android
http://stackoverflow.com/questions/7114573/get-contacts-mobile-number-only
Votre commentaire