Je crée une application Android et je dois appeler la liste de contacts du téléphone. Je dois appeler la fonction de liste de contacts, choisir un contact, puis revenir à mon application avec le nom du contact. Voici le code que j'ai obtenu sur Internet, mais cela ne fonctionne pas.
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Contacts extends ListActivity {
private ListAdapter mAdapter;
public TextView pbContact;
public static String PBCONTACT;
public static final int ACTIVITY_EDIT=1;
private static final int ACTIVITY_CREATE=0;
// Called when the activity is first created.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
startManagingCursor(C);
String[] columns = new String[] {People.NAME};
int[] names = new int[] {R.id.row_entry};
mAdapter = new SimpleCursorAdapter(this, R.layout.mycontacts, C, columns, names);
setListAdapter(mAdapter);
} // end onCreate()
// Called when contact is pressed
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor C = (Cursor) mAdapter.getItem(position);
PBCONTACT = C.getString(C.getColumnIndex(People.NAME));
// RHS 05/06
//pbContact = (TextView) findViewById(R.id.myContact);
//pbContact.setText(new StringBuilder().append("b"));
Intent i = new Intent(this, NoteEdit.class);
startActivityForResult(i, ACTIVITY_CREATE);
}
}
Réponses:
Je ne suis pas sûr à 100% de ce que votre exemple de code est censé faire, mais l'extrait suivant devrait vous aider à «appeler la fonction de liste de contacts, choisir un contact, puis revenir à [votre] application avec le nom du contact».
Il y a trois étapes à ce processus.
1. Autorisations
Ajoutez une autorisation de lecture des données de contacts au manifeste de votre application.
2. Appel du sélecteur de contacts
Dans votre activité, créez une intention qui demande au système de trouver une activité qui peut effectuer une action PICK à partir des éléments de l'URI des contacts.
Appel
startActivityForResult
, en passant cette intention (et un entier de code de requête,PICK_CONTACT
dans cet exemple). Cela amènera Android à lancer une activité enregistrée pour la prise en chargeACTION_PICK
sur lePeople.CONTENT_URI
, puis à revenir à cette activité lorsque la sélection est effectuée (ou annulée).3. À l'écoute du résultat
Toujours dans votre activité, remplacez la
onActivityResult
méthode pour écouter le retour de l'activité «sélectionner un contact» que vous avez lancée à l'étape 2. Vous devez vérifier que le code de demande renvoyé correspond à la valeur attendue et que le code de résultat estRESULT_OK
.Vous pouvez obtenir l'URI du contact sélectionné en appelant
getData()
le paramètre Data Intent. Pour obtenir le nom du contact sélectionné, vous devez utiliser cet URI pour créer une nouvelle requête et extraire le nom du curseur renvoyé.Code source complet: tutorials-android.blogspot.com (comment appeler la liste de contacts Android) .
la source
Je le fais de cette façon pour la version Android 2.2 Froyo: utilisez essentiellement eclipse pour créer une classe comme: classe publique SomePickContactName étend l'activité
puis insérez ce code. N'oubliez pas d'ajouter les variables de classe privée et CONSTANTS référencées dans ma version du code:
la source
En recherchant une solution API de niveau 5 à l'aide de l'API ContactsContract, vous pouvez légèrement modifier le code ci-dessus avec ce qui suit:
Et puis dans onActivityResult, utilisez le nom de la colonne:
la source
Voici l'extrait de code pour obtenir un contact:
}
la source
la source
car sans sélectionner aucun contact, il donnera une exception. il vaut donc mieux vérifier cette condition.
la source
Le code complet est donné ci-dessous
la source
private static final int PICK_CONTACT = 1;
.À ma grande surprise, vous n'avez pas besoin de l'autorisation des utilisateurs CONTACT_READ pour lire les noms et certaines informations de base (le contact est-il suivi, quelle était l'heure du dernier appel). Cependant, vous avez besoin d'une autorisation pour lire les détails du contact comme le numéro de téléphone.
la source
Soyez prudent lorsque vous travaillez avec la liste de contacts Android.
La lecture de la liste de contacts dans les méthodes ci-dessus fonctionne sur la plupart des appareils Android, sauf HTC One et Sony Xperia. J'ai perdu mes six semaines à essayer de comprendre ce qui ne va pas!
La plupart des didacticiels disponibles en ligne sont presque similaires - lisez d'abord "TOUS" les contacts, puis montrez-les
Listview
avecArrayAdapter
. Ce n'est pas une solution efficace en termes de mémoire. Au lieu de chercher d'abord des solutions sur d'autres sites Web, jetez un œil à developer.android.com. Si aucune solution n'est disponible sur developer.android.com, vous devriez chercher ailleurs.La solution consiste à utiliser
CursorAdapter
au lieu deArrayAdapter
pour récupérer la liste de contacts. L'utilisationArrayAdapter
fonctionnerait sur la plupart des appareils, mais ce n'est pas efficace. LeCursorAdapter
récupère uniquement une partie de la liste de contacts au moment de l'exécution pendant leListView
défilement.Récupération d'une liste de contacts: récupération d'une liste de contacts
la source
la source
salut j'ai un code pour enregistrer le contact dans votre base de données par préférence partagée voici mon code
la source
la source
J'utilise le code fourni par @Colin MacKenzie - III. Merci beaucoup!
Pour quelqu'un qui recherche un remplacement de managedQuery «obsolète»:
Tout d'abord, en supposant l'utilisation de la bibliothèque de support v4:
2ème:
3e,
4ème, annuler les rappels:
5ème:
6ème, le code ci - dessus , sauf que je change le paramètre de signature d'intention en curseur:
7ème, appelez initLoader:
8ème, n'oubliez pas ce morceau de code
Références:
Principes de base d'Android: charger correctement les données
Initialisation d'un chargeur dans une activité
la source