6

wählen ich möchte wählen eindeutige kontakte von android nur diese kontakte, die telefonnummern haben. Ich verwende diesen Codewie man eindeutige kontakte von android

ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
       null, null, ContactsContract.Contacts.DISPLAY_NAME); 
     // Find the ListView resource. 
     mainListView = (ListView) findViewById(R.id.mainListView); 

     // When item is tapped, toggle checked properties of CheckBox and 
     // Planet. 
     mainListView 
       .setOnItemClickListener(new AdapterView.OnItemClickListener() 
       { 
        public void onItemClick(AdapterView<?> parent, View item, 
          int position, long id) 
        { 
         ContactsList planet = listAdapter.getItem(position); 
         planet.toggleChecked(); 
         PlanetViewHolder viewHolder = (PlanetViewHolder) item 
           .getTag(); 
         viewHolder.getCheckBox().setChecked(planet.isChecked()); 
        } 
       }); 

     // Create and populate planets. 
     planets = (ContactsList[]) getLastNonConfigurationInstance(); 
     // planets = new Planet[10]; 
     // planets.Add("asdf"); 
     ArrayList<ContactsList> planetList = new ArrayList<ContactsList>(); 
     String phoneNumber = null; 
     String phoneType = null; 

     count = cur.getCount(); 
     contacts = new ContactsList[count]; 

     if (planets == null) 
     { 
      if (cur.getCount() > 0) 
      { 
       planets = new ContactsList[cur.getCount()]; 
       int i = 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) 
        { 
         // Query phone here. Covered next 
         Cursor pCur = cr 
           .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
             null, 
             ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
               + " = ?", new String[] 
             { id }, null); 

         // WHILE WE HAVE CURSOR GET THE PHONE NUMERS 
         while (pCur.moveToNext()) 
         { 
          // Do something with phones 
          phoneNumber = pCur 
            .getString(pCur 
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); 

          phoneType = pCur 
            .getString(pCur 
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 

          Log.i("Pratik", name + "'s PHONE :" + phoneNumber); 
          Log.i("Pratik", "PHONE TYPE :" + phoneType); 
         } 
         pCur.close(); 
        } 

        planets = new ContactsList[] 
        { new ContactsList(name, phoneNumber) }; 

        contacts[i] = planets[0]; 
        planetList.addAll(Arrays.asList(planets)); 

        i++; 
       } 
      } 

dieser Code alle Kontakte abrufen und in eine Liste einfügen. aber ich möchte einzigartige Kontakte und nur die, die Telefonnummer haben. Wie kann ich das machen?? Gibt es irgendeine Methode, um ein Argument in der Abfrage zu übergeben, um nur eindeutige Kontakte auszuwählen ???

Antwort

11

Ich glaube, Sie meinen Sie bekam für einige Kontakte Datensatz duplizieren. Sie müssen also die Bedingung für Ihre Abfrage hinzufügen. Der wesentliche Teil ist Kontakte müssen in sichtbaren Gruppe und haben Telefonnummer.

String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" 
       + ("1") + "'"; 
     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
       + " COLLATE LOCALIZED ASC"; 
cur = context.getContentResolver().query(
       ContactsContract.Contacts.CONTENT_URI, projection, selection 
         + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER 
         + "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated 
+0

Nicht auf pre ICS funktioniert ... –

+0

@Puru: Ich habe das auf Android2.2 –

+0

@Jul: Gibt es eine Lösung für ICS und höhere Versionen? –

0

einfache Möglichkeit, Telefonnummern und Kontaktnamen zu bekommen

// set as global 
Set<string> phonenumbersList = new HashSet<string>(); 

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

      //contact has name number and phonenumber does not exists in list 
      if (phoneNumber != null && name != null && !phonenumbersList.contains(phoneNumber)){ 
       planets = new ContactsList[]{ new ContactsList(name, phoneNumber) }; 

       phonenumbersList.add(phoneNumber); 
       planetList.addAll(Arrays.asList(planets)); 
       planetList.Add(phoneNumber, name); 
      } 
      } 
      phones.close(); 
+1

ich bin immer schon Telefonnummer mit meinem Code. Ich möchte eindeutige Kontakte –

+2

auswählen und was verstehst du unter einzigartig? – user1841306

+0

Ich möchte keine Wiederholungen. eine Telefonnummer kommt nur einmal –

1

Dies funktioniert für mich, um Kontakt mit der Telefonnummer zu bekommen. Hier stellen wir abfragen Datentabelle und mit contact_id contact provider documentation

@Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

final String ORDER_BY = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " ASC"; 

    final String[] PROJECTION = { 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY, 
      ContactsContract.CommonDataKinds.Phone.NUMBER 
    }; 

return new CursorLoader(
       context, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       PROJECTION, 
       null, 
       null, 
       ORDER_BY 
     ); 
} 
Verwandte Themen