2014-07-04 16 views
7

Tworzę aplikację, którą chcę zintegrować z aplikacją kontaktów/osób z Androidem. Konfiguruję niestandardowy typ MIME, syncadapter i plik contacts.xml z elementem ContactsDataKind.Niestandardowe akcje w aplikacji Kontakty (podobne do G +)

Wygląda na to, że działa dobrze, ale wydaje się, że nie można zdefiniować wielu działań dla poszczególnych rodzajów danych (w tym przypadku chciałbym, aby ludzie mogli zobaczyć profil kontaktu, a także wysłać mu wiadomość bezpośrednio .

Aplikacja G + zdaje sobie z tym poradzić, ale byłem w stanie dowiedzieć się, jak oni to zrobili Oto zrzut ekranu z G + integracji w ludzi.! http://i.imgur.com/QotHjDk.png

Dziękuję za poświęcony czas

+0

To nie jest dla mnie jasne, co masz próbować zrobić. Czy chcesz, aby Twoja aplikacja pojawiała się w menu, które pojawia się w kontaktach/osobach, lub ma wiele opcji działań w Twojej aplikacji? Na moim telefonie w taki sposób, że widzę ekran podobny do tego na ekranie, do którego się łączysz, wchodząc do aplikacji telefonu, dotykając przycisku menu (trzy pionowo ustawione kropki) na kafelku osoby tam, która przywołuje okno dialogowe z danymi kontaktowymi danej osoby, a następnie dotknięcie ikony kontaktu w tym oknie dialogowym. W tym momencie nie jestem pewien, czy nadal znajduję się w aplikacji telefonu lub aplikacji kontaktów/osób. – hBrent

Odpowiedz

8

Po prostu musisz dodać dodatkowe wiersze w tabeli ContactsContract.Data podczas wstawiania kontaktu. Patrz „strukturę contacts.xml” w documentation:

Element <ContactsDataKind> steruje wyświetlaniem wierszy niestandardowych danych twojej aplikacji w interfejsie aplikacji Kontakty użytkownika. To ma następującą składnię:

<ContactsDataKind 
    android:mimeType="MIMEtype" 
    android:icon="icon_resources" 
    android:summaryColumn="column_name" 
    android:detailColumn="column_name"> 

dla każdego z nich, kontakt App ContactDetailFragment dodaje jeden DataViewEntry. Pozycje listy działają jako dane dla adaptera używanego do budowania interfejsu danych kontaktowych. Po kliknięciu wpisu zawierającego intencję wywoływana jest startActivity(). Ten zamiar jest zbudowany na podstawie typu MIME elementu danych i Uri.

entry.intent = new Intent(Intent.ACTION_VIEW); 
entry.intent.setDataAndType(entry.uri, entry.mimetype); 

Na przykład, G + aplikacja ma następujące es_contacts.xml:

<ContactsDataKind android:summaryColumn="data2" android:detailColumn="data3" 

i tworzy wiersze tak:

ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference("raw_contact_id", i1) 
    .withValue("mimetype", "vnd.android.cursor.item/vnd.googleplus.profile.comm") 
    .withValue("data4", Integer.valueOf(14)) 
    .withValue("data5", "hangout") 
    .withValue("data3", context.getString(R.string.start_hangout_action_label)); 

ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference("raw_contact_id", i1) 
    .withValue("mimetype", "vnd.android.cursor.item/vnd.googleplus.profile") 
    .withValue("data4", Integer.valueOf(20)) 
    .withValue("data5", "addtocircle") 
    .withValue("data3", context.getString(R.string.add_to_circle_action_label)); 
+0

Kiedy używałem wielu typów mime, moja aplikacja pojawiała się wiele razy (wiele stron na suwaku) w okienku szybkiego kontaktu. Każda strona miała jedną akcję. Czy to jest problem z moją konfiguracją, czy coś, co mogę rozwiązać w inny sposób? –

+0

@matiash Skąd się wzięło źródło aplikacji G +? – kierans

+2

@kierans Nie zrobiłem tego, użyłem dex2jar do jego dekompilacji. – matiash

Powiązane problemy