2014-07-04 1 views
7

Ich erstelle eine Anwendung, die ich in die Kontakte-/Personenanwendung von Android integrieren möchte. Ich habe meinen benutzerdefinierten MIME-Typ, einen Syncadapter und eine contacts.xml-Datei mit einem ContactsDataKind-Element eingerichtet.Benutzerdefinierte Aktionen in der Kontakte-App (ähnlich G +)

Das scheint gut zu funktionieren, aber es scheint nicht möglich zu sein, mehrere Aktionen pro Datenart zu definieren (in diesem Fall möchte ich, dass Personen das Profil eines Kontakts sehen und ihnen direkt eine Nachricht senden können) .

die G + App scheint dies zu handhaben, aber ich habe es nicht gelungen, herauszufinden, wie sie es getan haben hier ein Screenshot von der G + Integration in Menschen:.! http://i.imgur.com/QotHjDk.png

Dank für Ihre Zeit danken

+0

Es mir nicht klar ist, was du bist versuchen zu tun. Möchten Sie, dass Ihre App in dem Menü angezeigt wird, das in Kontakten/Personen angezeigt wird, oder mehrere Aktionsoptionen in Ihrer App haben? Auf meinem Telefon kann ich einen Bildschirm wie auf dem Screenshot sehen, mit dem du verlinkt hast, indem du in die Telefon-App gehst und die Menü-Taste (drei vertikal ausgerichtete Punkte) auf die Kachel einer Person dort drückst, die aufleuchtet ein Dialog mit den Kontaktinformationen der Person und dann Berühren des Kontaktsymbols in diesem Dialog. Zu diesem Zeitpunkt bin ich mir nicht sicher, ob ich noch in der Telefon-App oder in der Kontakte-/Personen-App bin. – hBrent

Antwort

8

Sie müssen nur hinzufügen zusätzliche Zeilen in der ContactsContract.Data Tabelle beim Einfügen eines Kontakts. Siehe „contacts.xml Struktur“ in den documentation:

Das <ContactsDataKind> Element steuert die Anzeige Ihrer benutzerdefinierte Datenzeilen der Anwendung in der Benutzeroberfläche der Kontakte-Anwendung. Es hat die folgende Syntax:

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

Für jeden von ihnen, der Kontakt App ContactDetailFragment fügt eine DataViewEntry. Die Listeneinträge dienen als Daten für einen Adapter, der zum Erstellen der UI für Kontaktdetails verwendet wird. Wenn ein Eintrag mit einem Intent angeklickt wird, wird startActivity() aufgerufen. Diese Absicht wird aus dem MIME-Typ des Datenelements und Uri erstellt.

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

Zum Beispiel die G + App hat folgende es_contacts.xml:

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

Und schafft die Zeilen wie folgt aus:

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

Wenn ich mehrere MIME-Typen verwendet habe, erschien meine Anwendung im Quick-Popup-Popup mehrfach (mehrere Seiten im Slider). Jede Seite hatte eine einzige Aktion. Ist das ein Problem mit meinem Setup oder etwas, das ich anders lösen kann? –

+0

@matiash Wo haben Sie die Quelle für die G + App gefunden? – kierans

+2

@kierans Ich habe nicht, nur Dex2jar verwendet, um es zu dekompilieren. – matiash