We often face some challenges when working with Xamarin.Forms.
In a similar instance, I faced one when trying to read Contacts. I found myself in a fix because the data that I had received for an Image was basically a URI with type content://
The data retrieved from the Contact for a Thumbnail was something like this:
content://com.android.contacts/contacts/29059/photo
Obviously, Xamarin.Forms is fully equipped to deal with any sort of ImageSource that comes in its ways, except something that is directly a platform specific.
In order to render this, I went ahead with DependencyServices.
Here’s my implementation for this:
public interface IContentImageService { Stream GetImageUri(string contentUri); }
[assembly: Xamarin.Forms.Dependency(typeof(ContentResolverMethods))] namespace YourNamespace.Droid.Dependencies { public class ContentResolverMethods : IContentImageService { public Stream GetImageUri(string contentUri) { var uri = Android.Net.Uri.Parse(contentUri); return Android.App.Application.Context.ContentResolver.OpenInputStream(uri); } } }
Now in order to use this, you can always invoke the method implemented in Android using DependencyServices from within the Xamarin.Forms Project which is either a .NetStandard, Shared or a PCL based project
var stream = DependencyService.Get<IContentImageService>().GetImageUri(imageUri); return ImageSource.FromStream(() => stream);
Happy Coding!