2

J'essaie d'écrire un filtre d'intention pour sélectionner un contact dans la liste des contacts (à des fins purement éducatives ... J'apprends les intentions). Après avoir appelé startActivity sur une intention implicite, android devrait trouver mon activité personnalisée ainsi que l'activité par défaut en tant qu'Activités candidates et laissez-moi choisir celle que je veux utiliser (résolution d'intention).Android Problème de filtre d'intention

Cependant, avec ma configuration actuelle, il ouvre le sélecteur de contacts par défaut d'android sans me donner le choix. Voici mon intention-filtre.

<activity android:name=".ContactPicker" android:label="PICKER" > 
    <intent-filter> 
     <action android:name="android.intent.action.PICK" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="content" android:host="com.android.contacts" android:path="contacts" /> 
    </intent-filter> 
</activity> 

et voici comment j'appelle l'intention implicite sur l'activité principale:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://com.android.contacts/contacts")); 
startActivityForResult(intent, PICK_CONTACT); 
+0

Vous devez utiliser ACTION_CHOOSER documenté ici http: // développeur. android.com/reference/android/content/Intent.html#ACTION_CHOOSER - désolé je ne sais pas comment l'utiliser moi-même mais essayez google pour des exemples. – Squonk

+1

@MisterSquonk: Cela serait nécessaire si l'utilisateur avait choisi un gestionnaire par défaut pour ce 'Intent'. Il est concevable que l'application de contacts intégrée soit prédéterminée, mais je serais surpris, car ils ne le font pas pour d'autres «Intents» que j'ai essayé de contourner (par exemple, des écrans d'accueil alternatifs). – CommonsWare

Répondre

4

Essayez:

<intent-filter> 
    <action android:name="android.intent.action.PICK"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="vnd.android.cursor.dir/contact"/> 
</intent-filter> 
+0

Merci, cela a fonctionné. Toute idée de pourquoi les intentions de filtrage par Uri ne fonctionne pas dans ce cas et le filtrage par type mime fait? – AlephNull

+0

@AlephNull: Les URI du fournisseur de contenu sont utilisés pour rechercher le type MIME. En citant les documents 'IntentFilter'," Si vous spécifiez un schéma mais pas de type, seul l'Intent qui n'a pas de type (tel que mailto :) correspond, un contenu: URI ne correspondra jamais car ils ont toujours un type MIME qui est fourni par leur fournisseur de contenu. " Habituellement, les activités associées à un filtre de fournisseur de contenu sur le type MIME. En outre, dans ce cas, vous êtes toujours mieux servi en faisant ce que Google fait. J'ai obtenu le '' ci-dessus en regardant le code source à l'application Contacts. – CommonsWare

+0

Génial, j'apprécie votre aide. Une dernière question, où puis-je trouver le code source de l'application de contacts? – AlephNull