获取联系人图片Xamarin表格

时间:2017-05-03 09:22:57

标签: android xamarin xamarin.forms android-contacts

我正在使用Xamarin Forms创建一个混合移动应用程序。我想显示所有电话簿联系人的列表,其中包含以下详细信息:

  1. 名称
  2. 图像
  3. 我添加了权限" READ_CONTACTS"在android清单中。以下是获取所有联系人的代码:

    var contactList = new List < MContacts > ();
    
    var ContactDetailURI = ContactsContract.Contacts.ContentUri;
    
    string[] ContactDetailProjection = {
     ContactsContract.Contacts.InterfaceConsts.Id,
     ContactsContract.Contacts.InterfaceConsts.DisplayName,
     ContactsContract.ContactsColumns.ContactLastUpdatedTimestamp,
     ContactsContract.Contacts.InterfaceConsts.PhotoId,
     ContactsContract.Contacts.InterfaceConsts.PhotoUri,
     ContactsContract.Contacts.InterfaceConsts.PhotoFileId,
     ContactsContract.Contacts.InterfaceConsts.PhotoThumbnailUri
    };
    
    var ContactDetailCursor = Forms.Context.ContentResolver.Query(
     ContactDetailURI,
     ContactDetailProjection,
     null,
     null,
     null
    );
    
    if (ContactDetailCursor.MoveToFirst()) {
     do {
        var contact = new MContacts();
        contact.Id = ContactDetailCursor.GetLong(ContactDetailCursor.GetColumnIndex(ContactDetailProjection[0]));
        contact.DisplayName = ContactDetailCursor.GetString(ContactDetailCursor.GetColumnIndex(ContactDetailProjection[1]));
        contact.PhotoId = ContactDetailCursor.GetString(ContactDetailCursor.GetColumnIndex(ContactDetailProjection[6]));
    
        contactList.Add(contact);
    
     } while (ContactDetailCursor.MoveToNext());
    }
    
    return contactList;
    

    我有一个显示数据的XAML页面。我正在使用Image Cell。以下是XAML代码:

    <ContentPage.Content>
        <ListView x:Name="ContactList">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ImageCell
                        Text="{Binding DisplayName}"
                        ImageSource="{Binding PhotoId}">
                    </ImageCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ContentPage.Content>
    

    我收到的是联系人姓名但在图片栏中我只能得到这个:

    content://com.android.contacts/contacts/1/photo
    

    我应该怎么做以显示图像?我在这里缺少什么?

    P.S。我不想使用Xamarin.Mobile组件或任何其他组件。

1 个答案:

答案 0 :(得分:3)

Android可通过内容提供商和内容解析器访问其他应用的文件。因此,您首先必须将content://方案URL转换为文件流。你可以这样做:

// convert uri to stream (Android code, ContentResolver is a property of the Activity class):
var stream = ContentResolver.OpenInputStream(uri);

// or when not in an activity (e.g. a service):
var otherStream = Android.App.Application.Context.ContentResolver.OpenInputStream(uri);

// eventually convert the stream to imagesource for consumption in Xamarin Forms:
var imagesource = Xamarin.Forms.ImageSource.FromStream(() => stream);

有关详细信息,请参阅以下资源: