2010-12-18 11 views
13

Chciałbym zintegrować moją aplikację z menedżera kontaktów:Zintegruj moją aplikację ze stykiem

dokładniej:

Kiedy biegnę Kontakt aplikację w telefonie, a potem kliknąć na dowolny avatar, podręczne (Quick Contact Badge) pojawia się okno z jakąś aplikacją do wyboru (Kontakt, Mail, itp.) Chciałbym dodać moją Aplikację w tym miejscu.

To jest możliwe?

Mam nadzieję, że będzie jasne.

Z góry dziękuję.

+0

Jak to rozwiązałeś? Chciałbym zrobić to samo. – chrisonline

+0

Do tej pory nie było szczęścia, jest to oczekujące zadanie na mojej liście TODO, jako soos, ponieważ znajdę jakieś rozwiązanie, które opublikuję tutaj. zrób to samo :). – vsm

Odpowiedz

14

Hej, w końcu rozwiązałem to, dodając pole niestandardowe do ContactProvider, a następnie QuickContactBadge połączy je dla ciebie.

Mój kod do dodania, usunięcia konkretnego wpisu, usunięcia wszystkich wpisów dodanych przeze mnie.

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

Mam nadzieję, że niektórzy uznali to za przydatne.

+0

Czy mógłbyś wyjaśnić ten "Hej facet w końcu rozwiązałem to dodanie pola niestandardowego do ContactProvider, a następnie QuickContactBadge zostanie link dla Ciebie." – Chrispix

+1

Jeśli dodasz pole niestandardowe do kontaktuPersonel, Twoja aplikacja zostanie wyświetlona na liście QuickContactBadge. Sprawdź domyślną aplikację do kontaktu w telefonie i "dotknij" kontaktu pojawi się okno (odznaka) z niektórymi dostępnymi aplikacjami. Moją intencją było dodanie mojej aplikacji do tej odznaki i stwierdziłem, że możesz dodać swoje własne pole, umieść tam pewne informacje, a następnie Android połączy twoją aplikację z tym konkretnym kontaktem, ponieważ moja aplikacja jest właścicielem tego niestandardowego pola. – vsm

+0

czy możesz mi powiedzieć, co to jest nazwa konta? Czy to tylko prosta nazwa kontaktu? A kiedy próbowałem to daje mi wyjątek w metodzie applyBatch. Proszę pomóż mi. – Rahil2952

Powiązane problemy