[英]How to add structured data to a new contact Intent
我需要支持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"));
另外,请注意,我不想在清单中添加允许写入联系人的权限。 这就是使用Intent的全部意义。
试试这个代码对我有用
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"/>
更多细节请看这篇文章..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.