Lesen Sie die Telefonnummern aller Kontakte in Android

70

Ich verwende diesen Code, um alle Kontaktnamen und Telefonnummern abzurufen:

String[] projection = new String[]
{
    People.NAME,
    People.NUMBER
};

Cursor c = ctx.getContentResolver().query(People.CONTENT_URI, projection, null, null, People.NAME + " ASC");
c.moveToFirst();

int nameCol = c.getColumnIndex(People.NAME);
int numCol = c.getColumnIndex(People.NUMBER);

int nContacts = c.getCount();

do
{
  // Do something
} while(c.moveToNext());

Dies gibt jedoch nur die primäre Nummer für jeden Kontakt zurück, aber ich möchte auch die sekundären Nummern erhalten. Wie kann ich das machen?

Shuwo
quelle
1
versuchen Sie Android Contact Extractor . Eine kleine einfache, einfach zu bedienende Bibliothek
Nitesh

Antworten:

30

Sie können alle mit einem Kontakt verknüpften Telefonnummern folgendermaßen lesen:

Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, personId);
Uri phonesUri = Uri.withAppendedPath(personUri, People.Phones.CONTENT_DIRECTORY);
String[] proj = new String[] {Phones._ID, Phones.TYPE, Phones.NUMBER, Phones.LABEL}
Cursor cursor = contentResolver.query(phonesUri, proj, null, null, null);

Bitte beachten Sie, dass dieses Beispiel (wie Ihr Beispiel) die veraltete Kontakt-API verwendet. Ab Eclair wurde dies durch die ContactsContract- API ersetzt.

Graeme Duncan
quelle
151

Der folgende Code zeigt eine einfache Möglichkeit, alle Telefonnummern und Namen zu lesen:

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
  String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
  String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}
phones.close();

HINWEIS: getContentResolver ist eine Methode aus dem ActivityKontext.

Dinesh Kumar
quelle
1
Vielen Dank, diese Einzelabfragemethode ist 100-mal schneller!
Pavel Alexeev
17
Signifikant schneller, aber der Kontaktname kann dupliziert werden, wenn dieser Kontakt mehr als eine Nummer hat.
Wayne
@ Dinesh Kumar Welches ist das Abrufen aller Kontakte, aber ich brauche vom Benutzer ausgewählte Einzelkontakte
Karthik
Wie vermeide ich Duplikate hier?
Asif Sb
2
Es gibt nur ein paar kleine Kontakte! In meinem Fall ContactsContract.CommonDataKinds.Phone.CONTENT_URIbekomme ich 361 Kontakt, ContactsContract.Contacts.CONTENT_URIbekomme aber 5115 Kontakt! Was ist die Differenz?!
SMMousavi
25

Dieser Code zeigt, wie Sie alle Telefonnummern für jeden Kontakt erhalten.

ContentResolver cr = getActivity().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) {
             Cursor pCur = cr.query(
                      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                      null, 
                      ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                      new String[]{id}, null);
             while (pCur.moveToNext()) {
                  int phoneType = pCur.getInt(pCur.getColumnIndex(
                      ContactsContract.CommonDataKinds.Phone.TYPE));
                  String phoneNumber = pCur.getString(pCur.getColumnIndex(
                      ContactsContract.CommonDataKinds.Phone.NUMBER));
                  switch (phoneType) {
                        case Phone.TYPE_MOBILE:
                            Log.e(name + "(mobile number)", phoneNumber);
                            break;
                        case Phone.TYPE_HOME:
                            Log.e(name + "(home number)", phoneNumber);
                            break;
                        case Phone.TYPE_WORK:
                            Log.e(name + "(work number)", phoneNumber);
                            break;
                        case Phone.TYPE_OTHER:
                            Log.e(name + "(other number)", phoneNumber);
                            break;                                  
                        default:
                            break;
                  }
              } 
              pCur.close();
        }
    }
}
Valerybodak
quelle
Hallo @anivaler. Ich habe versucht, Ihre Lösung in meinen Code zu implementieren, aber sie funktioniert nicht gut. Zeige die richtige Nummer, aber wenn ich scrolle, ändere die Nummern. Können Sie sich bitte meine Frage ansehen? stackoverflow.com/questions/38978923/…
SP
Hallo, ich habe es implementiert, es funktioniert gut, aber ich habe nicht verstanden, was daran falsch ist. Es zeigt die Telefonnummer mit dem Namen mehr als zweimal an, aber als ich es im Telefon eingecheckt habe, kommt dieselbe Nummer und der Name nur einmal
Sunil Chaudhary
10
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 <span id="IL_AD4" class="IL_AD">phone
    // number</span>
    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();
Anatoliy Nikolaev
quelle
9

Sie können alle Telefonkontakte wie folgt abrufen:

    Cursor c = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[] { ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.RawContacts.ACCOUNT_TYPE },
            ContactsContract.RawContacts.ACCOUNT_TYPE + " <> 'google' ",
            null, null);

Das vollständige Beispiel finden Sie HIER ...........

Gagan
quelle
2
Für meine ~ 800 Kontakte laufen die Codes in dieser Antwort 89 ms lang, aber in der anderen Richtung (Abfrage der Kontakt-ID, dann Telefonnummern für jede ID) wurden 23 000 ms verwendet!
hungson175
Super schnell! beste Antwort
Azhar Bandri
2

Auf die gleiche Weise erhalten Sie einfach ihre anderen Nummern unter Verwendung der anderen "Personen" -Referenzen

People.TYPE_HOME
People.TYPE_MOBILE
People.TYPE_OTHER
People.TYPE_WORK
Donal Rafferty
quelle
2

Sie können alle Kontakte, die keine Nummer haben, und alle, die keinen Namen haben, aus diesem Code erhalten

public void readContacts() {
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY + " ASC");
    ContactCount = cur.getCount();

    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));
            String phone = null;
            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()) {
                    phone = pCur.getString(
                            pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    System.out.println("phone" + phone);
                }
                pCur.close();
            }
            if (phone == "" || name == "" || name.equals(phone)) {
                if (phone.equals(""))
                    getAllContact.add(new MissingPhoneModelClass("No Number", name, id));
                if (name.equals("") || name.equals(phone))
                    getAllContact.add(new MissingPhoneModelClass(phone, "No Name", id));

            } else {
                if(TextUtils.equals(phone,null)){
                    getAllContact.add(new MissingPhoneModelClass("No Number", name, id));
                }
                else {
                    getAllContact.add(new MissingPhoneModelClass(phone, name, id));
                }
            }
        }
    }
}

Eine Sache, die Sie tun können, ist, dass Sie im Manifest die Berechtigung für den Kontakt READ and WRITE erteilen müssen. Danach können Sie die Modellklasse für die Liste erstellen, mit der der gesamte Kontakt hier hinzugefügt werden kann, ist die Modellklasse

public class PhoneModelClass {
private String number;
private String name;
private String id;
private String rawId;

public PhoneModelClass(String number, String name, String id, String rawId) {
    this.number = number;
    this.name = name;
    this.id = id;
    this.rawId = rawId;
}

public PhoneModelClass(String number, String name, String id) {
    this.number = number;
    this.name = name;
    this.id = id;
}

public String getRawId() {
    return rawId;
}

public void setRawId(String rawId) {
    this.rawId = rawId;
}

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
  }
}

Genießen :)

Syed Rafaqat Hussain
quelle
1

Das eine gab mir schließlich die Antwort , die ich suchte. Hier können Sie alle Namen und Telefonnummern der Kontakte auf dem Telefon abrufen.

package com.test;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;

public class TestContacts extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                              null, null, null, null);
        if (cur != null && cur.getCount() > 0) {
            while (cur.moveToNext()) {

                if (Integer.parseInt.equals(cur.getString(cur.getColumnIndex(
                            ContactsContract.Contacts.HAS_PHONE_NUMBER)))) {
                    String id = cur.getString(cur.getColumnIndex(
                                ContactsContract.Contacts._ID));
                    String name = cur.getString(cur.getColumnIndex(
                                ContactsContract.Contacts.DISPLAY_NAME));
                    Cursor pCur = cr.query(
                                           ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = ?", new String[] { id }, null);
                    int i = 0;
                    int pCount = pCur.getCount();
                    String[] phoneNum = new String[pCount];
                    String[] phoneType = new String[pCount];
                    while (pCur != null && pCur.moveToNext()) {
                        phoneNum[i] = pCur.getString(pCur.getColumnIndex(
                        ContactsContract.CommonDataKinds.Phone.NUMBER));
                        phoneType[i] = pCur.getString(pCur.getColumnIndex(
                                ContactsContract.CommonDataKinds.Phone.TYPE));
                        i++;
                    }
                }

            }

        }

    }
}
reckte sich
quelle
1
Abstimmungen ohne Erklärung sollten eigentlich nicht erlaubt sein, aber ich habe meinen Code auf den aktuellen Stand gebracht. Ich benutze diesen Code derzeit. Wenn es einen Tippfehler oder etwas gibt, das verhindert, dass es richtig funktioniert, lassen Sie es mich wissen, und ich werde es beheben.
Craned
1

Ich habe mein Bedürfnis unten behoben

Manifest-Berechtigungen

        <uses-permission android:name="android.permission.READ_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
        <!-- Read Contacts from phone -->
        <uses-permission android:name="android.permission.read_contacts" />
        <uses-permission android:name="android.permission.read_phone_state" />
        <uses-permission android:name="android.permission.READ_CALL_LOG" />

Hinweis: Nachdem Sie im Manifest Berechtigungen erteilt haben, können einige Mobiltelefone dies verweigern, wenn Sie Einstellungen -> Anwendungen -> suchen müssen. Klicken Sie darauf und aktivieren Sie die erforderlichen Berechtigungen

Geben Sie hier die Bildbeschreibung ein

 btn_readallcontacks.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
            List<User> userList = new ArrayList<User>();
            while (phones.moveToNext()) {
                User user = new User();
                user.setNamee(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
                user.setPhone(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                userList.add(user);
                Log.d(TAG, "Name : " + user.getNamee().toString());
                Log.d(TAG, "Phone : " + user.getPhone().toString());
            }
            phones.close();
        }
    });
Sam
quelle
1

Akzeptierte Antwort funktioniert, aber keine eindeutigen Nummern.

Siehe diesen Code, er gibt eindeutige Nummern zurück.

public static void readContacts(Context context) {
        if (context == null)
            return;
        ContentResolver contentResolver = context.getContentResolver();

        if (contentResolver == null)
            return;

        String[] fieldListProjection = {
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
                ContactsContract.Contacts.HAS_PHONE_NUMBER
        };

        Cursor phones = contentResolver
                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI
                        , fieldListProjection, null, null, null);
        HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>();

        if (phones != null && phones.getCount() > 0) {
            while (phones.moveToNext()) {
                String normalizedNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER));
                if (Integer.parseInt(phones.getString(phones.getColumnIndex(
                        ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    if (normalizedNumbersAlreadyFound.add(normalizedNumber)) {
                        String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                        String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Log.d("test", " Print all values");
                    }
                }
            }
            phones.close();
        }
    }
Yogesh Rathi
quelle
0

Laden Sie Kontakte im Hintergrund mit CursorLoader:

  CursorLoader cursor = new CursorLoader(this, ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
            Cursor managedCursor = cursor.loadInBackground();

            int number = managedCursor.getColumnIndex(ContactsContract.Contacts.Data.DATA1);
            int name = managedCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
            int index = 0;
            while (managedCursor.moveToNext()) {
                String phNumber = managedCursor.getString(number);
                String phName = managedCursor.getString(name);
            }
AskQ
quelle
0

So verwenden Sie die ContentsContractAPI, um Ihre Kontakte in Ihrem Telefonbuch abzurufen. Sie müssen diese Berechtigungen in Ihre hinzufügenAndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

Anschließend können Sie diese Methode ausführen, um alle Ihre Kontakte zu durchlaufen.

Hier ist ein Beispiel für die Abfrage von Feldern wie Name und Telefonnummer. Sie können sich selbst für die Verwendung von CommonDataKinds konfigurieren und andere Felder in Ihrem Kontakt abfragen.

https://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds

private fun readContactsOnDevice() {
    val context = requireContext()
    if (ContextCompat.checkSelfPermission(
            context, Manifest.permission.WRITE_CONTACTS
        ) != PackageManager.PERMISSION_GRANTED &&
        ContextCompat.checkSelfPermission(
            context, Manifest.permission.READ_CONTACTS
        ) != PackageManager.PERMISSION_GRANTED
    ) {
        requestPermissions(
            arrayOf(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS), 1
        )
        return
    }

    val contentResolver = context.contentResolver
    val contacts = contentResolver.query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        null, null, null, null
    )

    while (contacts?.moveToNext() == true) {
        val name = contacts.getString(
            contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
        )
        val phoneNumber = contacts.getString(
            contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
        )
        Timber.i("Name: $name, Phone Number: $phoneNumber")
    }
}
Morgan Koh
quelle
-1
     package com.example.readcontacts;

        import java.util.ArrayList;

        import android.app.Activity; import android.app.ProgressDialog;
        import android.content.ContentResolver; import
        android.database.Cursor; import android.net.Uri; import
        android.os.Bundle; import android.os.Handler; import
        android.provider.ContactsContract; import android.view.View; import
        android.widget.AdapterView; import
        android.widget.AdapterView.OnItemClickListener; import
        android.widget.ArrayAdapter; import android.widget.ListView; import
        android.widget.Toast;

        public class MainActivity extends Activity {    private ListView
        mListView;  private ProgressDialog pDialog;     private Handler
        updateBarHandler;

            ArrayList<String> contactList;  Cursor cursor;  int counter;    
            @Override   public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                pDialog = new ProgressDialog(this);         pDialog.setMessage("Reading
        contacts...");      pDialog.setCancelable(false);       pDialog.show();

                mListView = (ListView) findViewById(R.id.list);         updateBarHandler
        =new Handler();
                        // Since reading contacts takes more time, let's run it on a separate thread.       new Thread(new Runnable() {

                    @Override           public void run() {
                        getContacts();          }       }).start();

                // Set onclicklistener to the list item.
                mListView.setOnItemClickListener(new OnItemClickListener() {

                    @Override           public void onItemClick(AdapterView<?> parent, View
        view,
                            int position, long id) {
                        //TODO Do whatever you want with the list data
                        Toast.makeText(getApplicationContext(), "item clicked : \n"+contactList.get(position), Toast.LENGTH_SHORT).show();          }
                });     }

            public void getContacts() {


                contactList = new ArrayList<String>();

                String phoneNumber = null;      String email = null;

                Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;        String
        _ID = ContactsContract.Contacts._ID;        String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;       String HAS_PHONE_NUMBER =
        ContactsContract.Contacts.HAS_PHONE_NUMBER;

                Uri PhoneCONTENT_URI =
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI;         String
        Phone_CONTACT_ID =
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID;      String NUMBER =
        ContactsContract.CommonDataKinds.Phone.NUMBER;

                Uri EmailCONTENT_URI = 
        ContactsContract.CommonDataKinds.Email.CONTENT_URI;         String
        EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID;
                String DATA = ContactsContract.CommonDataKinds.Email.DATA;

                StringBuffer output;

                ContentResolver contentResolver = getContentResolver();

                cursor = contentResolver.query(CONTENT_URI, null,null, null,
        null);  

                // Iterate every contact in the phone       if (cursor.getCount() > 0)
        {

                    counter = 0;            while (cursor.moveToNext()) {
                        output = new StringBuffer();

                        // Update the progress message
                        updateBarHandler.post(new Runnable() {
                            public void run() {
                                pDialog.setMessage("Reading contacts : "+ counter++ +"/"+cursor.getCount());
                            }
                        });

                        String contact_id = cursor.getString(cursor.getColumnIndex( _ID ));
                        String name = cursor.getString(cursor.getColumnIndex( DISPLAY_NAME ));

                        int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(
        HAS_PHONE_NUMBER )));

                        if (hasPhoneNumber > 0) {

                            output.append("\n First Name:" + name);

                            //This is to read multiple phone numbers associated with the same contact
                            Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?", new String[] { contact_id }, null);

                            while (phoneCursor.moveToNext()) {
                                phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));
                                output.append("\n Phone number:" + phoneNumber);

                            }

                            phoneCursor.close();

                            // Read every email id associated with the contact
                            Cursor emailCursor = contentResolver.query(EmailCONTENT_URI,    null, EmailCONTACT_ID+ " =
        ?", new String[] { contact_id }, null);

                            while (emailCursor.moveToNext()) {

                                email = emailCursor.getString(emailCursor.getColumnIndex(DATA));

                                output.append("\n Email:" + email);

                            }

                            emailCursor.close();
                        }

                        // Add the contact to the ArrayList
                        contactList.add(output.toString());             }

                    // ListView has to be updated using a ui thread
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item,
        R.id.text1, contactList);
                            mListView.setAdapter(adapter);          
                        }           });

                    // Dismiss the progressbar after 500 millisecondds
                    updateBarHandler.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                            pDialog.cancel();               
                        }           }, 500);        }

            }

        }

List item
Santosh Mahule
quelle
-1

Code zum Abrufen des Kontaktnamens (aufsteigende Reihenfolge) und der Nummer

Weitere Informationen : Kontakt in Listenansicht anzeigen

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" ASC");
        while (phones.moveToNext())
        {
            String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));


        }
        phones.close();
Parsania Hardik
quelle