Domanda

Sto cercando di recuperare il nome del contatto, numero di telefono e indirizzo dalla lista dei contatti di Android. Il nome e il telefono sono piuttosto semplice ma l'indirizzo sembra non essere accessibili con il livello 1.6 api.

Qualcuno ha capito come ottenere l'indirizzo di un contatto? Inoltre c'è una nuova API 2.0. Come posso approfittare di questo e di ripiego al vecchio api utilizzando 1 binario. Se questo è ancora possibile.

È stato utile?

Soluzione

Prima di Android 2.0 è necessario interrogare Contacts.ContactMethods.CONTENT_URI per ottenere gli indirizzi postali è necessario passare

Contacts.ContactMethods.PERSON_ID + "=? and " + Contacts.ContactMethods.KIND + "=?"

per la selezione e per il parametro selectArgs:

new String[] { personId, Integer.toString(Contacts.KIND_POSTAL) }

A partire dal 2.0 si utilizza la nuova ContactsContract che è molto più complessa a causa di un contatto possibile trasferire informazioni ora aggregate in un certo numero di fonti. Alcuni messaggi buon gruppo sulla nuova API sono qui e < a href = "http://groups.google.com/group/android-developers/browse_thread/thread/133816827efc8eb9" rel = "nofollow noreferrer"> qui .

Il metodo consigliato per indirizzare più API piattaforma dallo stesso binario è quello di utilizzare la riflessione (si veda questo post sul blog ). Ho trovato però se si target la vostra applicazione al 1,6 o al di sotto nel manifesto, ma imposta il percorso di generazione a raccogliere il file jar 2.0 di Android 2.0 è possibile chiamare le API senza la necessità di una riflessione. Hai solo bisogno di stare molto attenti che le classi che sono dipendevano classi 2.0 non vengono caricati in un dispositivo 1.6 o il caricatore di classe getteranno. Per evitare questo è necessario utilizzare una sorta di fabbrica di rompere le dipendenze (o di un quadro DI come Guice). Vedere questo distacco per ulteriori discussioni.

Altri suggerimenti

Grazie a Anthony Forloney ( sotto ) per il collegamento a "come leggere contatti", che è stato utile. Per estendere il contenuto della che collegano , con il codice di come leggere "indirizzo", queste linee dovrebbero aiutare! Essi dovrebbero prendere l'indirizzo postale, come vedete, tramite una query utilizzando il StructuredPostal contants.

            Cursor postals = getContentResolver().query(
                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = "
                        + contactId, null, null);
        int postFormattedNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
        int postTypeNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE);
        int postStreetNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET);
        while (postals.moveToNext()) {
            String postalData = postals.getString(postFormattedNdx);
            postalCat = postalCat+ postalData+ ", [";
            postalData = String.valueOf(postals.getInt(postTypeNdx));
            postalCat = postalCat+ postalData+ "], ";
            postalData = postals.getString(postStreetNdx);
            postalCat = postalCat+ postalData+ " ";
        }
        postals.close();

Il resto della che collegano effettivamente recuperare il nome ed i telefoni (quando si correggere il "numero di telefono ha" errore per il valore booleano - il booleano non viene analizzato correttamente)

Il mio telefono atm, ma qui è un legame con una domanda simile al tuo.

Spero che questo aiuta o si punta nella direzione giusta.

EDIT:

avevo detto, vorrei modificare la mia risposta originale per almeno verso quello che cercate, questo è probabilmente malvagio tardi e avete la vostra risposta già, ma qui è più informazioni se si fosse ancora alla ricerca di un po ', quello che ti serve da cercare è ContactsContract.CommonDataKinds.StructuredPostal è possibile estrarre informazioni specifiche per quanto riguarda l'indirizzo. Per quanto riguarda un esempio di utilizzo di Android 2.0 qui mostra alcuni esempi di estrazione le informazioni da un contatto, che è se non hai capito già.

In bocca al lupo.

questo è come ho fatto con Android 2.3.3:

            String where = ContactsContract.Data._ID + " = "
                                                     + uriData.getLastPathSegment()
                                                     + " AND ContactsContract.Data.MIMETYPE = '"
                                                     + ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE
                                                     + "'";

            String[] projection = new String[] { StructuredPostal.STREET,
                                                 StructuredPostal.CITY,
                                                 StructuredPostal.REGION,
                                                 StructuredPostal.POSTCODE,
                                                 StructuredPostal.COUNTRY};

            Cursor cursor = getContentResolver().query( ContactsContract.Data.CONTENT_URI,
                                                         projection,
                                                         where,
                                                         null,
                                                         null);
            String strOutput = "";
            if (cursor.moveToFirst())
            {
                strOutput += "\n" + cursor.getString(0);
                strOutput += "\n" + cursor.getString(1);
                strOutput += "\n" + cursor.getString(2);
                strOutput += "\n" + cursor.getString(3);
                strOutput += "\n" + cursor.getString(4);
            } 

            cursor.close();

Nota: il uriData è ottenuto catturando l'intento di visualizzare l'indirizzo. Questo è risolto qui: Cosa è l'intento associato con "Vedi indirizzo di lavoro" a contatti / scheda contatto?

Invece di _ID, sentitevi liberi di provare ContactsContract.Data.CONTACT_ID

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top