Большинство / все значения из ContactsContract.Intents.Insert
обрабатываются в классе model/EntityModifier.java
в приложении контактов по умолчанию - и это просто вставляет значение из Insert.NAME
в StructuredName.GIVEN_NAME
.
Вы можете попробовать импортироватьэто как vCard 2.1 (текстовая / x-vcard), которая поддерживает все компоненты имени, но требует, чтобы вы либо сбросили свой файл vCard на SD-карту, либо предоставили что-то, что ContentResolver#openInputStream(Uri)
может прочитать (обычно файл на SD-карте или URIуказывая на ваш собственный ContentProvider).
Простой пример использования ContentProvider для динамического создания визитных карточек:
В вашей активности:
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.
С другой стороны, этот метод такжепозволяют добавлять рабочие / мобильные и другие номера (и многое другое).