无法使用 Xamarin.Android 中的 Xamarin.Mobile 组件保存联系人
Unable to Save Contact using Xamarin.Mobile Component in Xamarin.Android
我在 Xamarin.Android 项目中使用这个 Xamarin.Mobile component。经过大量谷歌搜索并浏览他们的样本后,我发现只有从 phone 检索联系人到我的应用程序的方法。
下面是我的代码:
AddressBook book = new AddressBook(context)
{
PreferContactAggregation = true
};
Phone ph = new Phone(){
Type = PhoneType.Mobile,
Number = "9952429044"
};
Contact ct = new Contact()
{
DisplayName = "Sai Ram",
FirstName = "Om",
MiddleName = "Sai",
LastName = "Ram",
Phones = new List<Phone>(){ph}
};
我需要将联系人对象保存到 phone 的地址簿中。我在 Xamarin.Contacts
.
中找不到任何类似 book.Save(contact)
的方法
Xamarin.Mobile有API只能读取联系人,不能添加。
编辑
这里是一个简短的示例,说明如何将新的联系人与手机号码添加到您的联系人中。
List<ContentProviderOperation> ops = new List<ContentProviderOperation>();
int rawContactInsertIndex = ops.Count;
ops.Add(ContentProviderOperation.NewInsert(Android.Provider.ContactsContract.RawContacts.ContentUri)
.WithValue(Android.Provider.ContactsContract.RawContacts.InterfaceConsts.AccountType, null)
.WithValue(Android.Provider.ContactsContract.RawContacts.InterfaceConsts.AccountName, null).Build());
ops.Add(ContentProviderOperation
.NewInsert(Android.Provider.ContactsContract.Data.ContentUri)
.WithValueBackReference(Android.Provider.ContactsContract.Data.InterfaceConsts.RawContactId,rawContactInsertIndex)
.WithValue(Android.Provider.ContactsContract.Data.InterfaceConsts.Mimetype, Android.Provider.ContactsContract.CommonDataKinds.StructuredName.ContentItemType)
.WithValue(Android.Provider.ContactsContract.CommonDataKinds.StructuredName.DisplayName, "Vikas Patidar") // Name of the person
.Build());
ops.Add(ContentProviderOperation
.NewInsert(Android.Provider.ContactsContract.Data.ContentUri)
.WithValueBackReference(
ContactsContract.Data.InterfaceConsts.RawContactId, rawContactInsertIndex)
.WithValue(Android.Provider.ContactsContract.Data.InterfaceConsts.Mimetype, Android.Provider.ContactsContract.CommonDataKinds.Phone.ContentItemType)
.WithValue(Android.Provider.ContactsContract.CommonDataKinds.Phone.Number, "9999999999") // Number of the person
.WithValue(Android.Provider.ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type, "mobile").Build()); // Type of mobile number
// Asking the Contact provider to create a new contact
try {
ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
} catch (Exception ex) {
Toast.MakeText(this, "Exception: " + ex.Message, ToastLength.Long).Show();
}
您可以找到有关如何保存其他字段的更多详细信息here。
不要忘记为您的应用添加 WRITE_CONTACTS 权限。
我在 Xamarin.Android 项目中使用这个 Xamarin.Mobile component。经过大量谷歌搜索并浏览他们的样本后,我发现只有从 phone 检索联系人到我的应用程序的方法。
下面是我的代码:
AddressBook book = new AddressBook(context)
{
PreferContactAggregation = true
};
Phone ph = new Phone(){
Type = PhoneType.Mobile,
Number = "9952429044"
};
Contact ct = new Contact()
{
DisplayName = "Sai Ram",
FirstName = "Om",
MiddleName = "Sai",
LastName = "Ram",
Phones = new List<Phone>(){ph}
};
我需要将联系人对象保存到 phone 的地址簿中。我在 Xamarin.Contacts
.
book.Save(contact)
的方法
Xamarin.Mobile有API只能读取联系人,不能添加。
编辑
这里是一个简短的示例,说明如何将新的联系人与手机号码添加到您的联系人中。
List<ContentProviderOperation> ops = new List<ContentProviderOperation>();
int rawContactInsertIndex = ops.Count;
ops.Add(ContentProviderOperation.NewInsert(Android.Provider.ContactsContract.RawContacts.ContentUri)
.WithValue(Android.Provider.ContactsContract.RawContacts.InterfaceConsts.AccountType, null)
.WithValue(Android.Provider.ContactsContract.RawContacts.InterfaceConsts.AccountName, null).Build());
ops.Add(ContentProviderOperation
.NewInsert(Android.Provider.ContactsContract.Data.ContentUri)
.WithValueBackReference(Android.Provider.ContactsContract.Data.InterfaceConsts.RawContactId,rawContactInsertIndex)
.WithValue(Android.Provider.ContactsContract.Data.InterfaceConsts.Mimetype, Android.Provider.ContactsContract.CommonDataKinds.StructuredName.ContentItemType)
.WithValue(Android.Provider.ContactsContract.CommonDataKinds.StructuredName.DisplayName, "Vikas Patidar") // Name of the person
.Build());
ops.Add(ContentProviderOperation
.NewInsert(Android.Provider.ContactsContract.Data.ContentUri)
.WithValueBackReference(
ContactsContract.Data.InterfaceConsts.RawContactId, rawContactInsertIndex)
.WithValue(Android.Provider.ContactsContract.Data.InterfaceConsts.Mimetype, Android.Provider.ContactsContract.CommonDataKinds.Phone.ContentItemType)
.WithValue(Android.Provider.ContactsContract.CommonDataKinds.Phone.Number, "9999999999") // Number of the person
.WithValue(Android.Provider.ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type, "mobile").Build()); // Type of mobile number
// Asking the Contact provider to create a new contact
try {
ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
} catch (Exception ex) {
Toast.MakeText(this, "Exception: " + ex.Message, ToastLength.Long).Show();
}
您可以找到有关如何保存其他字段的更多详细信息here。 不要忘记为您的应用添加 WRITE_CONTACTS 权限。