2010-06-09 8 views
5

Muy bien, soy un poco nuevo en el SDK de Android, así que perdóneme si mi pregunta no tiene sentido o es muy trivial. Me gustaría agregar un campo personalizado para contactos, que contenga el nombre de usuario de los contactos en un sitio web para el que estoy haciendo esta aplicación. Y, con este campo personalizado, me gustaría tener la capacidad de hacer clic en él (como "Enviar mensaje" o "Llamar al móvil") para poder ir a una Actividad específica en mi aplicación, con un conjunto de TextView con el nombre de usuario que acabo de hacer clic.Póngase en contacto con campos personalizados

Lo siento si eso es un poco confuso, si necesita algo más hágamelo saber!

+0

posible duplicado de [Cómo agregar un nuevo campo (s) al contacto?] (Http://stackoverflow.com/questions/2733589/how-to-add-new-fields-to-the- contact) – Pentium10

+0

posible duplicado de [¿Cómo asignar mediante programación una imagen (mapa de bits) a un contacto?] (http://stackoverflow.com/questions/3076197/how-to-programmatically-assign-a-picture-bitmap-to-a-contact) – Pentium10

Respuesta

3

Tienes que crear tu propio tipo de mimo para aquellos.

Aquí hay un ejemplo que guarda un booleano como mi tipo mime personalizado a los contactos. Utiliza la última SDK 2,1

public static final String MIMETYPE_FORMALITY = "vnd.android.cursor.item/useformality"; 
public clsMyClass saveFormality() { 
     try { 
      ContentValues values = new ContentValues(); 
      values.put(Data.DATA1, this.getFormality() ? "1" : "0"); 
      int mod = ctx.getContentResolver().update(
        Data.CONTENT_URI, 
        values, 
        Data.CONTACT_ID + "=" + this.getId() + " AND " 
          + Data.MIMETYPE + "= '" 
          + clsContacts.FORMALITY_MIMETYPE + "'", null); 

      if (mod == 0) { 
       values.put(Data.CONTACT_ID, this.getId()); 
       values.put(Data.MIMETYPE, clsContacts.FORMALITY_MIMETYPE); 
       ctx.getContentResolver().insert(Data.CONTENT_URI, values); 
      } 
     } catch (Exception e) { 
      Log.v(TAG(), "saveFormality failed"); 
     } 
    return this; 
    } 

public boolean getFormality() { 
    if (data.containsKey(FORMALITY)) { 
     return data.getAsBoolean(FORMALITY); 
    } else { 
     // read formality 
     Cursor c = readDataWithMimeType(clsContacts.MIMETYPE_FORMALITY, this.getId()); 
     if (c != null) { 
      try { 
       if (c.moveToFirst()) { 
        this.setFormality(c.getInt(0) == 1); 
        return (c.getInt(0) == 1); 
       } 
      } finally { 
       c.close(); 
      } 
     } 
     return false; 
    } 

} 
public clsMyClass setFormality(Boolean value) { 
    data.remove(FORMALITY); 
    data.put(FORMALITY, value); 
    return this; 
} 

/** 
* Utility method to read data with mime type 
* 
* @param mimetype String representation of the mimetype used for this type 
*   of data 
* @param contactid String representation of the contact id 
* @return 
*/ 
private Cursor readDataWithMimeType(String mimetype, String contactid) { 
    return ctx.getContentResolver().query(
      Data.CONTENT_URI, 
      new String[] { 
       Data.DATA1 
      }, 
      Data.RAW_CONTACT_ID + "=" + contactid + " AND " + Data.MIMETYPE + "= '" + mimetype 
        + "'", null, null); 
} 

uso es

objContact.setFormality(true).saveFormality(); 
+0

cuál los datos en "si (data.containsKey (MODALIDAD))" –

4

Está funcionando! Pero he cambiado Data.CONTACT_ID a Data.RAW_CONTACT_ID aquí:

if (mod == 0) { 
    values.put(Data.CONTACT_ID, this.getId()); 
    values.put(Data.MIMETYPE, clsContacts.FORMALITY_MIMETYPE); 
    ctx.getContentResolver().insert(Data.CONTENT_URI, values); 
} 
+0

y también aquí:. 'int mod = ctx.getContentResolver() actualización ( Data.CONTENT_URI, valores, Data.CONTACT_ID + "=" + this.getId() + "AND" + Data.MIMETYPE + "= '" + clsContacts.FORMALITY_MIMETYPE + "'", null); ' –

0

Para añadir campos personalizados es necesario agregar MIME personalizados en la tabla MIMETYPE. Pero no tenemos acceso directo a la tabla MIMETYPE. por lo que se puede hacer lo siguiente:

public static final String MIMETYPE="vnd.android.cursor.item/favsong"; 

     ContentValues values = new ContentValues(); 
    values.put(Data.RAW_CONTACT_ID, id); 
    values.put(Data.MIMETYPE, MIMETYPE); 
    values.put(Data.DATA1, "MyFavSong"); 
    Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values); 

lo que hemos hecho es, hemos creado un MIMETYPE personalizado como constante de cadena. Luego usando Insertar consulta estamos insertando una nueva fila en la tabla de datos que tiene RAW_CONTACT_ID de una persona que queremos asociar a nuestro campo personalizado, en la columna MIMETYPE ponemos nuestro propio tipo mimet y en la columna DATA1 ponemos la canción favorita. aquí el sistema agrega internamente el nuevo tipo MIMETYPE en la tabla MIMETYPE y le da una ID y esa ID se usa en la columna mimetype_id de la tabla de datos.

+0

A Si estás seguro de que este código agrega el nuevo campo probé este código, pero reemplaza mi nombre de contacto con MyFavSong. ¿Por qué? –

Cuestiones relacionadas