Pregunta

En el Android SamplesnCadapter hay la siguiente pieza de código:

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

Agregué esto como filtro para mi actividad

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

donde samplesyncadaptercolumns.mime_profile = vnd.android.cursor.item/vnd.myapp.profile

Agregué un contacto y puedo ver la entrada, pero cuando hago clic en él, no sucede nada. ¿Qué debo hacer para comenzar una actividad cuando el usuario hace clic en ella? Estaba tratando de hacer lo que se sugiere Aquí Para dispositivos anteriores a Honeycomb: El truco es insertar una fila de datos, "Editar en MyApp", que llevaría al usuario a su aplicación y a su aplicación proporcionaría una actividad de editor

¿Fue útil?

Solución

Creo que su filtro de intención podría ser incorrecto. De acuerdo a esta entrada, los elementos de acción y datos correctos deberían ser algo como lo siguiente:

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

Otros consejos

Esto es lo que hice. En el archivo manifiesto agregué estos filtros de intención para uno de mi actividad

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

El primero se transmitirá cuando el usuario haga clic en la acción de perfil que agregué en mis cuentas de adaptador de sincronización utilizando el código en el adaptador de sincronización de muestra (ver arriba)

El segundo le permite manejar la intención que la libreta de direcciones nativas es boradada cuando el usuario desea editar el contacto. Considere que en el primer caso porque el MIMETYPE es que uno de sus syncAdapter se llamará directamente a su actividad. En el segundo caso, se mostrará un cuadro de diálogo con la lista de aplicaciones registradas para manejar el android.intent.action.edit para android: mimetype = "vnd.android.cursor.item/persona", android: mimetype = "vnd.android .cursor.Item/Contact ", etc.

En mi actividad tengo un método como este:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top