2010-11-09 17 views
17

Chcę dostać kontakty zapisane w telefonie tylko nie na karcie SIM kontaktów przy użyciu nowych contactContracts apiJak zdobyć kontakty telefoniczne w Androidzie

Robię to przez filtrowanie typ konta (nie com.anddroid.contacts.sim) to, pracujesz dla jednej słuchawki (HTC Desire), ale nie ma typowego konta, które może działać dla wszystkich telefonów czy ktoś może mi powiedzieć, jak to zrobić?

+0

Nie można filtrować według "DeviceOnly" Typ konta? – systempuntoout

+0

Spójrz na zaakceptowaną odpowiedź w następującym pytaniu: [Jak uzyskać wszystkie kontakty z Androidem, ale bez tych, które są na SIM] (http://stackoverflow.com/questions/4338563/how-to-get-all-android -kontakty-ale-bez-tych-które-są-na-sim) Możesz również spojrzeć na następującą odpowiedź: [Znalezienie natury konta grupy kontaktów?] (http://stackoverflow.com/questions/4614089/finding -konta-natura-grupy kontaktowej/4634729 # 4634729) Myślę, że powyższe linki mogą pomóc w osiągnięciu tego, co chcesz. –

+0

może również wypróbować tę bibliotekę, ponieważ trzeba pobrać kontakt [Projekt Github] (https://github.com/nitiwari-dev/android-contact-extractor) – nitesh

Odpowiedz

1

Możesz chcieć spojrzeć na ContentProvider s dla dostawcy kontaktów.

ContentProvider tutorial nawet używa Kontakt Na przykład:

URI dla tabeli, która pasuje numery telefonów do osób i URI dla tabeli, która posiada zdjęć ludzi (zarówno sterowane przez styki zawartość operatora) są:

android.provider.Contacts.Phones.CONTENT_URI 
android.provider.Contacts.Photos.CONTENT_URI 

Dmitri Plotnikov ma kilka bardzo przydatnych rzeczy do powiedzenia w tej Google Group thread.

+1

dzięki za odpowiedź, ale potrzebuję tylko kontaktów telefonicznych i android.provider. Tabela Kontakt.hones.CONTENT_URI daje mi kontakty zarówno z telefonu i karty SIM, a także jest zdyskwalifikowany Chcę używać KontaktContract.Contacts api –

+0

Podany link już nie działa –

0

Można spróbować następujący kod, mam wymagane dane:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null, null,null); 
while (cursor.moveToNext()) { 
    listName.add(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); 
    listContactId.add(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); 
    if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {     
     Cursor pCur = getContentResolver().query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)),null, null); 
     while (pCur.moveToNext()) { 
      listMobileNo.add(pCur.getString(pCur.getColumnIndex("DATA1"))); 
     } 
     pCur.close(); 
    } else 
     listMobileNo.add(""); 
}    
+0

kursor jest umiarkowanie nieefektywny. –

0

Należy dodać uses_permission android: name = "android.permission.READ_CONTACTS następnie odczytać kontakty jak poniżej:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    while (cursor.moveToNext()) { 
     String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

    } 
27

Daj pozwolenie w pliku manifestu „android.permission.READ_CONTACTS”

wystarczy skopiować kod i kontakty zostaną pokazane w logcat

public class GetContactsDemo extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_getcontactsdemo); 
     readContacts(); 
    } 

    public void readContacts(){ 
     ContentResolver cr = 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) { 
        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()) { 
          String phone = pCur.getString(
           pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
          System.out.println("phone" + phone); 
        } 
        pCur.close(); 


        // get email and type 

        Cursor emailCur = cr.query(
          ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
          new String[]{id}, null); 
        while (emailCur.moveToNext()) { 
         // This would allow you get several email addresses 
          // if the email addresses were stored in an array 
         String email = emailCur.getString(
             emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
         String emailType = emailCur.getString(
             emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 

         System.out.println("Email " + email + " Email Type : " + emailType); 
        } 
        emailCur.close(); 

        // Get note....... 
        String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] noteWhereParams = new String[]{id, 
        ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE}; 
          Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null); 
        if (noteCur.moveToFirst()) { 
         String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); 
         System.out.println("Note " + note); 
        } 
        noteCur.close(); 

        //Get Postal Address.... 

        String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] addrWhereParams = new String[]{id, 
         ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
        Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, 
           null, null, null, null); 
        while(addrCur.moveToNext()) { 
         String poBox = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX)); 
         String street = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); 
         String city = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); 
         String state = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); 
         String postalCode = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); 
         String country = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); 
         String type = addrCur.getString(
            addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); 

         // Do something with these.... 

        } 
        addrCur.close(); 

        // Get Instant Messenger......... 
        String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] imWhereParams = new String[]{id, 
         ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE}; 
        Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI, 
          null, imWhere, imWhereParams, null); 
        if (imCur.moveToFirst()) { 
         String imName = imCur.getString(
           imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); 
         String imType; 
         imType = imCur.getString(
           imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE)); 
        } 
        imCur.close(); 

        // Get Organizations......... 

        String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] orgWhereParams = new String[]{id, 
         ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
        Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI, 
           null, orgWhere, orgWhereParams, null); 
        if (orgCur.moveToFirst()) { 
         String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); 
         String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); 
        } 
        orgCur.close(); 
       } 
      } 
     } 
    } 

} 
+1

Nie zapomnij dodać tego pozwolenia "android.permission.READ_CONTACTS" –

+0

@Kleopatra Czy możesz mi pomóc w uzyskaniu kontaktów SIM. Powyższy kod działa tylko dla kontaktów telefonicznych. –

+0

Jeśli masz pytanie, proszę napisać ... [pytanie] (http://stackoverflow.com/questions/ask) :-) Osobiście nie mogę ci pomóc, nie mam żadnego doświadczenia w tej dziedzinie. – kleopatra

Powiązane problemy