Как добавить структурированные данные в новый контакт

Мне нужно поддерживать Android 2.1 и выше.

Google опубликовал пример использования ContactsContract, но некоторые из них использовали вещи, которые доступны, начиная с уровня API 11, поэтому мне нужно импровизировать, но я застрял.

Итак, у меня есть это:

String firstName = contactProperties.get("firstName"); String lastName = contactProperties.get("lastName"); String phone = contactProperties.get("phone"); String email = contactProperties.get("email"); String company = contactProperties.get("company"); String postal = contactProperties.get("street") + ", " + contactProperties.get("city") + ", " + contactProperties.get("state") + " " + contactProperties.get("zip") + " " + contactProperties.get("country"); // Creates a new intent for sending to the device's contacts application Intent insertIntent = new Intent(ContactsContract.Intents.Insert.ACTION); // Sets the MIME type to the one expected by the insertion activity insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE); insertIntent.putExtra(ContactsContract.Intents.Insert.NAME, firstName + " " + lastName); insertIntent.putExtra(ContactsContract.Intents.Insert.EMAIL, email); insertIntent.putExtra(ContactsContract.Intents.Insert.PHONE, phone); insertIntent.putExtra(ContactsContract.Intents.Insert.COMPANY, company); insertIntent.putExtra(ContactsContract.Intents.Insert.POSTAL, postal); // Send out the intent to start the device's contacts app in its add contact activity. startActivity(insertIntent); 

Обратите внимание, как я структурировал дополнения NAME и POSTAL . Это не работает на всех устройствах, хотя из-за того, что в некоторых адресных книгах есть поля первого и последнего имени, а также поля города, штата и почтового индекса. Итак, мое «решение» выглядит довольно глупо: поле первого имени имеет как первое, так и последнее имя, а поле адреса улицы имеет полный адрес. Как я могу это исправить? Кто-нибудь даст мне пример?

Для записи это не работает:

 insertIntent.putExtra(ContactsContract.CommonDataKinds.StructuredPostal.STREET, contactProperties.get("street")); insertIntent.putExtra(ContactsContract.CommonDataKinds.StructuredPostal.CITY, contactProperties.get("city")); 

Также обратите внимание, что я не хочу добавлять разрешение в свой манифест, чтобы разрешить запись в контакты. В этом весь смысл использования намерения.

Solutions Collecting From Web of "Как добавить структурированные данные в новый контакт"

Попробуйте этот код, он работает для меня

  String Streetname="ZZZZZ"; ArrayList < ContentProviderOperation > ops = new ArrayList < ContentProviderOperation > (); ops.add(ContentProviderOperation.newInsert( ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) .withValue( ContactsContract.CommonDataKinds.StructuredPostal.STREET, Streetname).build()); try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { Log.e(getApplicationContext().toString(), "Exception: " + e.getMessage()); } 

Добавить в манифест

  <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> 

Подробнее см. Это сообщение ..

Как добавить новые контакты в android