2010-04-09 6 views
5

J'ai un widget qui va ouvrir la liste de contacts par un numéro de téléphone. J'utilise Contacts.Intents.SHOW_OR_CREATE_CONTACT Je sais que c'est obsolète mais je veux que cela fonctionne sur android 1.6. J'ai un numéro de téléphone à utiliser sur l'intention de recherche. voici le codeAndroid - Afficher la liste des contacts avec le même numéro de téléphone

Intent contViewIntent = new Intent(Contacts.Intents.SHOW_OR_CREATE_CONTACT); 
contViewIntent.setData(Uri.fromParts("tel", number, null)); 

PendingIntent contPendIntent = PendingIntent.getActivity(context, 0, contViewIntent, 0); 
views.setOnClickPendingIntent(viewID, contPendIntent); 

Lorsque la liste de contacts a 2 ou plusieurs contacts avec le même numéro, puis cela va ouvrir la liste des contacts et a l'utilisateur une sélection. Cela fonctionne bien sur 1.6, mais sur 2.0 et ci-dessus, il montre une liste de contacts avec juste le numéro 1 ou numéro 2 dans les noms et quand vous sélectionnez un de ceux de la liste pour voir vous obtenez une erreur.

04-09 19: 12: 47,891: ERROR/CursorWindow (105): Bad demande pour l'emplacement de champ 0,6. numRows = 2, numColumns = 6

04-09 19: 12: 47,992: ERROR/AndroidRuntime (105): java.lang.IllegalStateException: obtenir fente de champ à partir de la ligne 0 col 6 a échoué

Comment puis-je obtenir ceci pour travailler sur 1.6 et 2.0 ci-dessus?

+0

Je pense que l'erreur essaie de dire qu'elle s'attend à une ligne, mais en obtient deux? Peut-être que l'application de contact dans Android plus tard a supprimé la fonctionnalité de sélection de contact que vous mentionnez? - juste une supposition – DEzra

Répondre

0

Je pense que vous pouvez être mieux en utilisant le fournisseur de contenu Android api en combinaison avec une requête SQL (trouver la ligne ou les lignes avec correspondance numéro de téléphone):

http://developer.android.com/guide/topics/providers/content-providers.html

Ensuite, vous pouvez afficher un écran d'option demandant l'utilisateur pour sélectionner le contact approprié si la requête renvoie deux contacts.

Ensuite, vous pouvez passer le champ _id (qui est unique) à l'application de contacts pour ouvrir le contact sélectionné (en évitant l'erreur que vous voyez).

1

Android 2.0 a un complètement nouveau nouvelle API pour la gestion des contacts (consultez ContactsContract). Dans mon application, j'ai fini par écrire la gestion des contacts de bas niveau deux fois - une fois pour 2.0, une fois pour 1.6 et moins (je vérifie par réflexion si la classe ContactsContract existe et passe au code 2.0+ dans ce cas).