Короткая версия:
ACTION_SEND_MULTIPLE
никогда не используется при совместном использовании контактов / визитных карточек. Вместо этого ACTION_SEND
всегда используется с данными, содержащими несколько контактов, а URI, содержащий multi LOOKUP_KEY
, разделен :
.
Длинная версия:
Совместное использование первого контакта:
content://com.android.contacts/contacts/as_multi_vcard/2345r1817-373F294D4F4329413151472F294F312F
BEGIN:VCARD
VERSION:2.1
N:NAME_1;
TEL;WORK:039-999-9999
EMAIL;HOME:updated@home.fr
URL:www.home_updated.fr
END:VCARD
Совместное использование второго контакта:
content://com.android.contacts/contacts/as_multi_vcard/2345r1820-4D553943354B2F514F4D553943354B2F514F
BEGIN:VCARD
VERSION:2.1
N:NAME_2;
TEL;WORK:039-999-9999
EMAIL;HOME:updated@home.fr
URL:www.home_updated.fr
END:VCARD
Совместное использование контактов один + два:
content://com.android.contacts/contacts/as_multi_vcard/2345r1817-373F294D4F4329413151472F294F312F%3A2345r1820-4D553943354B2F514F4D553943354B2F514F
BEGIN:VCARD
VERSION:2.1
N:NAME_1;
TEL;WORK:039-999-9999
EMAIL;HOME:updated@home.fr
URL:www.home_updated.fr
END:VCARD
BEGIN:VCARD
VERSION:2.1
N:NAME_2;
TEL;WORK:039-999-9999
EMAIL;HOME:updated@home.fr
URL:www.home_updated.fr
END:VCARD
Как вы можете видеть выше, совместное использование обоих контактов приводит к Uri
с двумя LOOKUP_KEY
, разделенными %3A
(двоеточие в ASCII). Я нашел код aosp, делающий это в PeopleActivity.java для деталей.
Так что я могу использовать совместное использование нескольких контактов с этим фрагментом кода:
if (Intent.ACTION_SEND.equals(action) && type != null) {
Log.d("type", "type: " + type);
if (type.equals("text/x-vcard")) {
handleSendContact(intent);
}
}
void handleSendContact(Intent intent) {
Uri contactUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (contactUri != null) {
// getLastPathSegment() decodes "%3A" to ":", so split must be done on colon
String[] lookupKeys = contactUri.getLastPathSegment().split(":");
for (String lookupKey : lookupKeys) {
// Query contact with lookup key
}
}
}