2010-12-18 25 views
13

me gustaría integrar mi aplicación con gestor de contactos:Integrar mi aplicación con el contacto

Más precisamente:

Cuando corro Contacto aplicación en mi teléfono y luego hacer clic en cualquier avatar, un emergente (Quick Placa de contacto) aparece Windows con alguna aplicación para elegir (Contacto, Correo, etc.) Me gustaría agregar mi Aplicación en ese lugar.

¿Eso es posible?

Espero ser claro.

Gracias de antemano.

+0

¿Cómo lo resolvió? Me gustaría hacer lo mismo. – chrisonline

+0

No tuve suerte hasta el momento, es una tarea pendiente en mi lista de TODO, así que para encontrar alguna solución, la publicaré aquí. por favor haz lo mismo :). – vsm

Respuesta

14

Hola chico, finalmente resolví esto agregando un campo personalizado a ContactProvider y luego QuickContactBadge lo vinculará por usted.

Mi código, para agregar, eliminar una entrada en particular, eliminar todas las entradas agregadas por mí.

private static final IM_LABEL = "Test protocol"; 
private static final LOG_TAG = "Log" 
    /** 
* This method add my account under IM field at default Contact 
* application 
* 
* Labeled with my custom protocol. 
* 
* @param contentResolver 
*   content resolver 
* @param uid 
*   User id from android 
* @param account 
*   account name 
*/ 
public static void updateIMContactField(ContentResolver contentResolver, 
     String uid, String account) { 

    ContentValues contentValues = new ContentValues(); 

    contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, 
      Integer.parseInt(uid)); 
    contentValues.put(ContactsContract.Data.MIMETYPE, 
      ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE); 
    contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE, 
      ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM); 
    contentValues.put(ContactsContract.CommonDataKinds.Im.LABEL, IM_LABEL); 
    contentValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, 
      ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM); 
    contentValues.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, 
      IM_LABEL); 

    contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, account); 

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValues(contentValues).build()); 

    try { 
     contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (Exception e) { 
     Log.d(LOG_TAG, "Can't update Contact's IM field."); 
    } 
} 

/** 
* This method remove IM entry at default Contact application. 
* 
* @param contentResolver 
*   content resolver 
* @param uid 
*   User id from android 
* @param account 
*   account name 
*/ 
public static void removeIMContactField(ContentResolver contentResolver, 
     String uid, String account) { 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    ops.add(ContentProviderOperation 
      .newDelete(Data.CONTENT_URI) 
      .withSelection(
        ContactsContract.Data.RAW_CONTACT_ID + "=? and " 
          + ContactsContract.Data.MIMETYPE + "=? and " 
          + ContactsContract.CommonDataKinds.Im.DATA 
          + " = ?", 
        new String[] { 
          String.valueOf(uid), 
          ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE, 
          account }).build()); 

    try { 
     contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (Exception e) { 
     Log.d(LOG_TAG, "Can't delete Contact's IM field."); 
    } 
} 

/** 
* This method remove IM all entries at default Contact application 
* 
* @param contentResolver 
*   content resolver 
*/ 
public static void deleteAllIMContactField(ContentResolver contentResolver) { 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    ops.add(ContentProviderOperation 
      .newDelete(Data.CONTENT_URI) 
      .withSelection(
        ContactsContract.Data.MIMETYPE 
          + "= ? and " 
          + ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL 
          + "= ?", 
        new String[] { 
          ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE, 
          IM_LABEL }).build()); 

    try { 
     contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (Exception e) { 
     Log.d(LOG_TAG, 
       "An exception occurred when deleting all IM field of Contact."); 
    } 
} 

Espero que alguien haya encontrado esta utilidad.

+0

¿Podría aclarar esto? Hola chico, finalmente resolví esto, agregando un campo personalizado a ContactProvider y luego QuickContactBadge lo vinculará por usted. – Chrispix

+1

Si agrega un campo personalizado a ContactProvider, su aplicación se incluirá en QuickContactBadge. Verifique la aplicación de contacto predeterminada en su teléfono y "toque" un contacto; se mostrará una ventana emergente (Credencial) con algunas aplicaciones disponibles. Mi intención era agregar mi aplicación a esa insignia y descubrí que puedes agregar tu propio campo y poner algo de información allí y luego, android vinculará tu aplicación con ese contacto en particular, ya que mi aplicación posee ese campo personalizado. – vsm

+0

¿me puede decir cuál es el nombre de la cuenta? ¿Es solo un simple nombre de contacto? Y cuando probé esto, me da una excepción en el método de applyBatch. Por favor, ayúdame. – Rahil2952

Cuestiones relacionadas