13

Pracuję nad aplikacją Android Honeycomb (v3.0), która wymaga wyświetlania WSZYSTKICH kontaktów zapisanych na koncie Google zarejestrowanym na urządzeniu. Jednym z problemów, który mam, jest to, że mogę tylko odzyskać kontakty, które są dostępne w "Moich kontaktach", "Oznaczonych gwiazdkami w Androidzie" i "Inne kontakty". Chciałbym również móc pobierać kontakty z "Katalogu". Uważam, że sekcja "Katalog" to funkcja udostępniana przez Google organizacjom i firmom, które chcą udostępniać katalog wszystkich członków/pracowników w swoich domenach innym. Proszę zobaczyć zrzut ekranu poniżej:Android 3.0 - odzyskiwanie wszystkich kontaktów za pośrednictwem kontaktówContract

Directory

tej pory, mam następujący wiersz w moim pliku manifestu:

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

Próbowałem przy użyciu tego kodu:

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)); 
} 
cursor.close(); 

W mój przypadek "Moje kontakty" i "Oznaczone gwiazdką w Androidzie" są puste. Jednakże uzyskuje się kontakt (1) w "Inne kontakty". "Katalog" zawiera setki kontaktów, które nie są pobierane.

Moje pytanie: Czy istnieje sposób, aby upewnić się, że kontakty w "Katalogu" są również pobierane? Wiem, że mogę po prostu skopiować kontakty za pomocą przeglądarki internetowej, a następnie zsynchronizować je z urządzeniem, ale jeśli nowy kontakt zostanie dodany do "Katalogu", musiałbym to zrobić ręcznie za każdym razem, więc to nie jest świetny wybór dla mnie. Proszę doradź.

+0

http://developer.android.com/resources/samples/ContactManager/index.html – VicVu

+0

Właśnie próbowałem kod w getContacts function() (ContactManager. plik java), ale ostatecznie nie ma żadnych wpisów bez względu na to, do czego ustawię mShowInvisible. – BVB

+0

Ustawienie 'String selection = null; 'zwróciło ten sam wynik co poprzednio z kodem, o którym wspomniałem. – BVB

Odpowiedz

3

Spójrz na poniższy kod

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.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 (("1") 
        .equals(cur 
          .getString(cur 
            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))) { 
       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.moveToNext()) { 
        phoneNum[i] = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        phoneType[i] = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 

        i++; 
       } 
      } 
+0

Myślę, że 'Cursor cur = cr.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null);' nie będzie w stanie zapytać "Directory". Wierzę, że próbowałem tego wcześniej. – BVB

+0

Nie mogłem znaleźć polubownego rozwiązania tego problemu. Obejściem, którego użyłem, było ręczne dodanie kontaktów z "Katalogu" do "Moich kontaktów". To sprawiłoby, że kod, który wysłałeś, działał dobrze (mój skończył się trochę inaczej, ale pomysł jest taki sam). Oczywiście, jeśli pojawił się nowy wpis w "Katalogu", musiałby zostać ręcznie przeniesiony. Złożę raport, jeśli znajdę lepszy sposób na zrobienie tego. – BVB

+0

@ BVB Czy znalazłeś w międzyczasie lepsze rozwiązanie? –

Powiązane problemy