Question

Dans le SampleSyncAdapter Android il y a le morceau de code suivant:

/**
 * Adds a profile action
 *
 * @param userId the userId of the sample SyncAdapter user object
 * @return instance of ContactOperations
 */
public ContactOperations addProfileAction(long userId) {
    mValues.clear();
    if (userId != 0) {
        mValues.put(SampleSyncAdapterColumns.DATA_PID, userId);
        mValues.put(SampleSyncAdapterColumns.DATA_SUMMARY, mContext
            .getString(R.string.syncadapter_profile_action));
        mValues.put(SampleSyncAdapterColumns.DATA_DETAIL, mContext
            .getString(R.string.view_profile));
        mValues.put(Data.MIMETYPE, SampleSyncAdapterColumns.MIME_PROFILE);
        addInsertOp();
    }
    return this;
}

J'ai ajouté ce filtre pour que mon activité

    <intent-filter>
        <action android:name="@string/syncadapter_profile_action" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.android.cursor.item/vnd.myapp.profile"
            android:host="contacts" />
     </intent-filter>  

où SampleSyncAdapterColumns.MIME_PROFILE = vnd.android.cursor.item / vnd.myapp.profile

J'ai ajouté un contact et je peux voir l'entrée mais quand je clique dessus rien ne se passe. Que dois-je faire pour commencer une activité lorsque l'utilisateur clique dessus? Je suis en train de faire ce qui est suggéré pour les appareils pré-nid d'abeille: l'astuce consiste à insérer une ligne de données, « Modifier dans MyApp », qui prendrait à l'utilisateur de votre application et votre application fournirait alors une activité de l'éditeur

Était-ce utile?

La solution

Je pense que votre filtre intention pourrait être incorrect. Selon cette d'entrée, les éléments d'action et corriger les données devraient quelque chose comme ce qui suit:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="vnd.android.cursor.item/vnd.myapp.profile" />
</intent-filter>

Autres conseils

est ce que je faisais. Dans le fichier manifest j'ai ajouté ces filtres pour une intention de mon activité

<intent-filter >
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />

    <data android:mimeType="vnd.android.cursor.item/vnd.myapp.profile" />
</intent-filter>

<intent-filter >
    <action android:name="android.intent.action.EDIT" />

    <category android:name="android.intent.category.DEFAULT" />

    <data
        android:host="contacts"
        android:mimeType="vnd.android.cursor.item/person" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/contact" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/raw_contact" />
</intent-filter>            

Le premier sera diffusé lorsque l'utilisateur clique sur l'action de profil que j'ai ajouté des comptes dans mon adaptateur de synchronisation utilisant le code dans l'échantillon adaptateur de synchronisation (voir ci-dessus)

Le second vous permet de gérer l'intention qui est boradcasted par le carnet d'adresses natif lorsque l'utilisateur souhaite modifier le contact. Considérez que dans le premier cas parce que le type MIME est que l'un de vos SyncAdapter votre activité sera appelée directement. Dans le second cas, une boîte de dialogue sera affiché avec la liste des applications enregistrées pour gérer la android.intent.action.EDIT pour Android: mimeType = « vnd.android.cursor.item / personne », android: mimeType = "vnd.android .cursor.item / contact » etc

Dans mon activité, j'ai une méthode comme ceci:

boolean handleIntent(Intent intent) {
    String action = intent.getAction();

    Uri uri = intent.getData();
    if (action.equalsIgnoreCase(Intent.ACTION_VIEW)) {
        handleProfileAction(uri);  // in this case uri points to ProfileAction Data raw that is one of the Data that your sync adaoter has added in the raw contact 
    } else if (action.equalsIgnoreCase(Intent.ACTION_EDIT)) {
        editYourContact(uri); // in this case the uri points to the Contact containing you raw contact although at least on SonuEricsson  Xperia mini when this intent is broadcasted by the context menu "edit contact" command I receive the URI of the raw contact when there is only one.
    }
    return true;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top