将个人资料图片添加到Xamarin中的联系人,Android

d4so4syb  于 2022-12-07  发布在  Android
关注(0)|答案(1)|浏览(159)

我正在创建一个混合移动应用程序,使用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);
            }
        }

如何将个人资料图片添加到联系人?

pkwftd7m

pkwftd7m1#

根据这个关于Insert Contact (ContactsContract) via Intent with Image (Photo)的案例,您需要使用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报告。
另外,我也尝试使用using the content provider to insert a contact的方法,但是RawContacts没有ACCOUNT_TYPE属性。
所以对于这个bug,你似乎不能用原生api给联系人添加个人资料图片。

相关问题