Question

Je suis en train de récupérer le nom du contact, numéro de téléphone et l'adresse de la liste de contacts Android. Le nom et le téléphone sont assez simple mais l'adresse semble ne pas être accessible au niveau de 1,6 api.

Quelqu'un a compris comment obtenir l'adresse d'un contact? De plus il y a un api complètement nouveau dans la version 2.0. Comment puis-je tirer parti de cette situation et à l'ancienne fallback api en utilisant 1 binaire. Si c'est même possible.

Était-ce utile?

La solution

Avant Android 2.0, vous devez interroger Contacts.ContactMethods.CONTENT_URI pour obtenir les adresses postales, vous devrez passer

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

pour la sélection et pour le paramètre selectArgs:

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

de 2.0 vous utilisez la nouvelle ContactsContract qui est beaucoup plus complexe, car un contact peut maintenant l'information globale sur un certain nombre de sources. Quelques bons messages de groupe sur la nouvelle API sont et < a href = "http://groups.google.com/group/android-developers/browse_thread/thread/133816827efc8eb9" rel = "nofollow noreferrer"> ici .

La méthode recommandée pour cibler plusieurs API de la plate-forme de la même réflexion binaire consiste à utiliser (voir cette blog ). J'ai trouvé que si vous ciblez votre application à 1.6 ou ci-dessous dans le manifeste, mais définissez le chemin de construction pour ramasser le fichier jar Android 2.0, vous pouvez appeler 2.0 apis sans la nécessité d'une réflexion. Vous avez juste besoin d'être très prudent que les classes qui dépendent de 2.0 classes ne sont pas chargées dans un dispositif 1.6 ou le chargeur de classe jetteront. Pour éviter cela, vous aurez besoin d'utiliser une sorte d'usine pour briser les dépendances (ou un cadre de DI comme Guice). Voir cette affichage pour de nouvelles discussions.

Autres conseils

Merci à Anthony Forloney ( ci-dessous ) pour le lien « lire Contacts », qui était utile. Pour étendre le contenu de lien qui, avec le code de comment lire « adresse », ces lignes devraient vous aider! Ils devraient chercher l'adresse postale, comme vous le voyez, en interrogeant en utilisant la StructuredPostal Constantes.

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

Le reste de que le lien ne fait la chercher le nom et les téléphones (lorsque vous corrigez le « a numéro de téléphone » erreur pour la valeur booléenne - le booléen ne soit pas correctement analysé)

Sur mon téléphone atm, mais est un lien avec une question semblable à la vôtre.

J'espère que cela vous aide ou pointe dans la bonne direction.

EDIT:

Je l'ai mentionné, je modifier ma réponse initiale au moins vers ce que vous recherchez, ce qui est probablement méchant en retard et vous avez votre réponse déjà, mais voici plus d'informations si vous cherchez encore pour certains, ce dont vous avez besoin à rechercher est ContactsContract.CommonDataKinds.StructuredPostal vous pouvez extraire des détails spécifiques concernant l'adresse. Pour ce qui est un exemple en utilisant Android 2.0 montre quelques exemples extraire informations d'un contact, qui est si vous ne l'avez pas déjà.

Bonne chance.

voilà comment je l'ai fait avec 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();

Remarque: uriData est obtenu en capturant l'intention de voir l'adresse. Ceci est résolu ici: Qu'est-ce que est l'intention associée à « Afficher adresse de travail » dans les Contacts / contact Carte

Au lieu de _ID, ne hésitez pas à essayer ContactsContract.Data.CONTACT_ID

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top