在Xamarin.Android中为联系人添加头像



我正在创建一个混合移动应用程序,使用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添加联系人头像。

最新更新