Skip to main content

Command Palette

Search for a command to run...

ContentResolver for Xamarin.Forms

Published
1 min readView as Markdown

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:

IContentImageService.cs

public interface IContentImageService
{
    Stream GetImageUri(string contentUri);
}

ContentResolverMethods.cs

[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!

More from this blog

B

Build, Break, Learn (by Anubhav)

32 posts

Insights, lessons, and deep dives on AI, Cloud, Architecture, and Modern Engineering—shared from the perspective of a hands-on builder focused on clarity, practical guidance, and real-world impact.