Domanda

Nel SampleSyncAdapter Android v'è il seguente pezzo di codice:

/**
 * 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;
}

Ho aggiunto questo come filtro per la mia attività

    <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>  

dove SampleSyncAdapterColumns.MIME_PROFILE = vnd.android.cursor.item / vnd.myapp.profile

Ho aggiunto un contatto e posso vedere la voce ma quando clicco su di esso non succede nulla. Cosa devo fare per iniziare un'attività quando l'utente fa clic su di esso? Stavo cercando di fare ciò che è suggerito Qui per i dispositivi Pre-nido d'ape: il trucco è quello di inserire una riga di dati, "Modifica in MyApp", che avrebbe portato l'utente al tuo app e la vostra applicazione sarebbe quindi fornire un'attività editor di

È stato utile?

Soluzione

Credo che il vostro filtro intento potrebbe non essere corretto. Secondo questa voce , gli elementi di azione e di dati corretti dovrebbe essere qualcosa di simile al seguente:

<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>

Altri suggerimenti

Questo è quello che ho fatto. Nel file manifest ho aggiunto questi filtri intenti per uno della mia attività

<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>            

La prima andrà in onda quando l'utente fa clic sul profilo di azione che ho aggiunto nella mia adattatore sincronia account utilizzando il codice dell'adattatore di sincronizzazione del campione (vedi sopra)

Il secondo permette di gestire l'intento che è boradcasted dalla rubrica nativa quando l'utente vuole modificare il contatto. Si consideri che nel primo caso perché il tipo MIME è che uno dei tuoi SyncAdapter vostra attività sarà chiamato direttamente. Nel secondo caso una finestra di dialogo verrà visualizzata con la lista delle applicazioni registrate per gestire l'android.intent.action.EDIT per Android: mimeType = "vnd.android.cursor.item / persona", android: mimeType = "vnd.android .cursor.item / contatto" etc

Nella mia attività ho un metodo come questo:

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top