2010-12-18 15 views
13

ich meine App mit Kontaktmanager möchte integrieren:meine app Integration mit Kontakt

Genauer gesagt:

Als ich Kontakt App auf meinem Handy laufen und dann auf jedem Avatar I klicken, wird ein Popup (Quick Kontakt Badge) Fenster zeigt sich mit irgendeiner Anwendung, um zu wählen (Kontakt, Post, usw.) Ich möchte meine Anwendung in diesem Platz hinzufügen.

Das ist möglich?

Ich hoffe, klar zu sein.

Vielen Dank im Voraus.

+0

Wie haben Sie es gelöst? Ich würde das gerne genauso machen. – chrisonline

+0

Bisher kein Glück, ist eine ausstehende Aufgabe in meiner TODO-Liste, so wie ich eine Lösung finde, werde ich sie hier veröffentlichen. mach bitte das gleiche :). – vsm

Antwort

14

Hey Mann endlich habe ich das Hinzufügen eines benutzerdefinierten Feld zu ContactProvider gelöst und dann QuickContactBadge wird es für Sie verknüpfen.

Mein Code, zum Hinzufügen, löschen Sie einen bestimmten Eintrag, löschen Sie alle von mir hinzugefügten Eintrag.

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."); 
    } 
} 

Hoffe jemand fand dies nützlich.

+0

Könnten Sie dies klarstellen? "Hey, mein Freund, ich habe das Problem gelöst, indem ich ein benutzerdefiniertes Feld zu ContactProvider hinzugefügt habe und dann wird QuickContactBadge es für Sie verlinken." – Chrispix

+1

Wenn Sie dem ContactProvider ein benutzerdefiniertes Feld hinzufügen, wird Ihre App in QuickContactBadge aufgeführt. Überprüfen Sie die Standard-Kontakt-App auf Ihrem Telefon und tippen Sie auf einen Kontakt. Ein Popup-Fenster wird angezeigt (Badge) mit einigen verfügbaren Apps. Meine Absicht war das Hinzufügen meiner App in dieses Abzeichen und ich fand, dass Sie Ihr eigenes Feld hinzufügen können einige Informationen dort und dann Android wird Ihre App mit diesem bestimmten Kontakt verknüpfen, da meine App dieses benutzerdefinierte Feld besitzt. – vsm

+0

können Sie mir sagen, was ist der Name des Kontos? Ist es nur ein einfacher Kontaktname? Und wenn ich das versuchte, gibt es mir eine Ausnahme in der Methode applyBatch. Bitte hilf mir. – Rahil2952