我正在创建一个混合移动应用程序,使用Xamarin.Forms.
我希望用户点击一个按钮,应用程序中的联系人就会插入到手机的联系人中,包括头像。
到目前为止,iOS方面的一切都很正常。成功插入头像。
我不能让它在Android上工作。我已经尝试过在这里寻找,但所有的解决方案都使用Java。插入姓名、电话和电子邮件效果很好。
下面是我的代码:public void SaveContacts(string name, string number, string email, string job, string company, byte[] imageData)
{
try
{
var intent = new Intent(Intent.ActionInsert);
intent.SetType(ContactsContract.Contacts.ContentType);
if (!string.IsNullOrWhiteSpace(name))
intent.PutExtra(ContactsContract.Intents.Insert.Name, name);
if (!string.IsNullOrWhiteSpace(number))
intent.PutExtra(ContactsContract.Intents.Insert.Phone, number);
if (!string.IsNullOrWhiteSpace(email))
intent.PutExtra(ContactsContract.Intents.Insert.Email, email);
if (imageData.Length != 0)
{
// INSERT PROFILE PICTURE HERE
}
Platform.CurrentActivity.StartActivity(intent);
}
catch (Exception ex)
{
DependencyService.Get<ILogger>()?.Error(ex);
}
}
如何添加联系人头像?
根据这个关于通过Intent with Image (Photo)插入联系人(ContactsContract)的案例,您需要使用intent.putParcelableArrayListExtra(Insert.DATA, data)
方法将照片添加到新联系人中。
但是我已经创建了一个样本来测试它。这个方法有一个bug。我使用以下代码:
List<ContentValues> data = new List<ContentValues>();
ContentValues row1 = new ContentValues();
Intent intent = new Intent(Intent.ActionInsert);
intent.SetType(ContactsContract.Contacts.Photo);
intent.PutParcelableArrayListExtra(ContactsContract.Intents.Insert.Data, data);
但是它会显示类型转换错误。尽管ContentValues
类继承自IParcelable
接口。错误仍然存在。你可以在github上向xamarin报告。
此外,我还尝试使用关于使用内容提供程序来插入联系人的方法。但是RawContacts
没有ACCOUNT_TYPE属性。
所以对于这个bug,似乎你不能用本地api添加联系人头像。