Как добавить контакт с именем и фамилией с помощью намерения

Я пытаюсь запустить андроидный родной «добавить или изменить контакт» с некоторыми данными уже в форме. Это код, который я использую в настоящее время:

Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); intent.putExtra(Insert.NAME, "A name"); intent.putExtra(Insert.PHONE, "123456789"); startActivity(intent); 

Моя проблема в том, что я хотел бы указать имя и фамилию. Я также заметил, что существует класс StructuredName, который содержит постоянные идентификаторы для всех полей, которые мне нужны. К сожалению, я не смог добавить поля StructuredName в намерение …

Кто-нибудь знает, как это делается правильно?

Примечание. Я не пытаюсь добавить контакт напрямую, но я хочу открыть заполненный диалог «добавить контакт»!

Спасибо Duh

Большинство / все значения из ContactsContract.Intents.Insert обрабатываются в классе model/EntityModifier.java в приложении контактов по умолчанию – и это просто Insert.NAME значение из Insert.NAME в StructuredName.GIVEN_NAME .

Вы можете попробовать импортировать его в качестве vCard 2.1 (text / x-vcard), который поддерживает все компоненты имени, но требует, чтобы вы либо сбросили файл vCard на SD-карте, либо предоставили то, что может прочитать ContentResolver#openInputStream(Uri) (как правило, Файл на SD-карте или URI, указывающий на собственный ContentProvider).

Простой пример, который использует ContentProvider для динамического создания vCards:

В вашей деятельности:

 Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.parse("content://some.authority/N:Jones;Bob\nTEL:123456790\n"), "text/x-vcard"); startActivity(i); 

В вашем ContentProvider (зарегистрированный для полномочий, используемых в намерении ACTION_VIEW):

 public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { try { FileOutputStream fos = getContext().openFileOutput("filename.txt", Context.MODE_PRIVATE); String vcard = "BEGIN:VCARD\nVERSION:2.1\n" + uri.getPath().substring(1) + "END:VCARD\n"; fos.write(vcard.getBytes("UTF-8")); fos.close(); return ParcelFileDescriptor.open(new File(getContext().getFilesDir(), "filename.txt"), ParcelFileDescriptor.MODE_READ_ONLY); } catch (IOException e) { throw new FileNotFoundException(); } } 

При срабатывании следует вставить контакт с именем, который вы указали на пути своего Uri, в телефонную книгу. Если у пользователя есть несколько учетных записей контактов, ему будет предложено выбрать его.

Примечание. Правильная кодировка vCard, конечно, полностью игнорируется. Я считаю, что большинство версий приложения для контактов должны поддерживать vCard 3.0, который также не имеет такой же мозговой мертвой кодировки, как vCard 2.1.

Сверху этот метод также позволит вам добавить рабочие / мобильные и другие номера (и многое другое).