13

Sto lavorando su un'applicazione Android Honeycomb (v3.0) che ha l'obbligo di visualizzare TUTTI i contatti memorizzati nell'account Google registrato sul dispositivo. Uno dei problemi che ho riscontrato è che posso recuperare solo i contatti disponibili in "I miei contatti", "Speciali in Android" e "Altri contatti". Mi piacerebbe anche essere in grado di recuperare i contatti dalla "Directory". Credo che la sezione "Directory" sia una funzionalità fornita da Google a organizzazioni e aziende che desiderano fornire agli altri una directory di tutti i membri/dipendenti all'interno dei propri domini. Si prega di vedere la schermata qui sotto:Android 3.0 - Come recuperare TUTTI i contatti tramite ContactsContract

Directory

Finora, ho la seguente riga nel mio file manifesto:

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

Ho provato con questo codice:

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

In il mio caso, "I miei contatti" e "Speciali in Android" sono vuoti. Tuttavia, si ottiene il contatto (1) in "Altri contatti". La "Directory" contiene centinaia di contatti che non vengono recuperati, però.

La mia domanda: C'è un modo per assicurarsi che i contatti nella "Directory" siano recuperati pure? So che posso semplicemente copiare i contatti usando il browser web e quindi sincronizzarli con il dispositivo, ma se un nuovo contatto viene aggiunto alla "Directory", dovrei farlo manualmente ogni volta, quindi questo non è una grande scelta per me. Si prega di avvisare.

+0

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

+0

Ho appena provato il codice nei getContacts funzione() (ContactManager. file java), ma non ci sono voci, non importa quello che ho impostato su mShowInvisible. – BVB

+0

Impostazione 'String selection = null;' ha restituito lo stesso risultato che avevo originariamente con il codice che ho menzionato. – BVB

risposta

3

un'occhiata al seguente codice di

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

Penso che 'Cursor cur = cr.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null);' non sarà in grado di interrogare la "Directory". Credo di aver provato questo prima. – BVB

+0

Non sono riuscito a trovare una soluzione amichevole a questo problema. Una soluzione alternativa che ho usato è stata quella di aggiungere manualmente i contatti dalla "Directory" a "I miei contatti". Ciò farebbe sì che il codice che hai postato funzioni perfettamente (il mio è finito in modo leggermente diverso, ma l'idea è la stessa). Ovviamente, se c'era una nuova voce nella "Directory", dovrebbe essere spostata manualmente. Riferirò indietro se trovo un modo migliore di farlo. – BVB

+0

@BVB Hai trovato una soluzione migliore nel frattempo? –

Problemi correlati