【问题标题】:Xamarin Forms - Media Plugin - Empty thumbnails on phoneXamarin Forms - 媒体插件 - 手机上的空缩略图
【发布时间】:2017-02-12 18:40:51
【问题描述】:

我正在使用 James Montemagno 的媒体插件来拍照。

出于某种原因,并且仅在我的手机上运行该应用程序时,拍照时,TestFolder 中的缩略图确实正确显示,但它们显示为空文件。

在模拟器中运行时图像正确显示。

这是我的代码:

 public async Task<MediaFile> TakePhoto() {
            MediaFile result = null;

            await CrossMedia.Current.Initialize();

            if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported) {
                // Supply media options for saving our photo after it's taken.
                var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions {
                    SaveToAlbum = true,
                    Directory = "TestFolder",
                    Name="test.jpg"
                };

                // Take a photo of the business receipt.
                result = await CrossMedia.Current.TakePhotoAsync(mediaOptions);
            }
            return result;
        }

编辑 1:

简而言之,由于某种原因,Media 插件无法在我的手机(华为 P8 Lite)上运行。我已经在 GitHub 上尝试过示例:(使用)

https://github.com/jamesmontemagno/MediaPlugin 

照片会显示在模拟器中,但不会显示在手机上(相机会打开并拍照)。如上所述,如果我访问相册文件夹,则会出现空缩略图。

编辑 2

这是安卓清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="15" />
    <application android:label="MediaPluginTests.Droid"></application>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-feature android:name="android.hardware.camera" />
   <uses-feature android:name="android.hardware.camera.autofocus" />
</manifest>

我还添加了:

   var cameraStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
            var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);

            if (cameraStatus != PermissionStatus.Granted || storageStatus != PermissionStatus.Granted) {
                var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Camera, Permission.Storage });
                cameraStatus = results[Permission.Camera];
                storageStatus = results[Permission.Storage];
            }

两个权限都按授予的状态返回。

编辑 3

我在三星 Galaxy A3 上试用过,效果很好,在相机胶卷和应用程序中都能正确显示。

但这就是我的华为 P8 手机相册中图像的显示方式:

编辑 4

我在不同的华为 P8 设备上进行了尝试,但遇到了同样的问题。

【问题讨论】:

  • iOS 和 Android 都出现错误?
  • 我只能在 Android 上测试它。
  • 您是否添加了清单权限?
  • @Mike 我降级到 2.3.0 但还是不行,缩略图显示为空,并且应用程序中没有显示图像。
  • 你能在这里发布 logcat 输出吗?华为 P8 和其他一些来自华为的类似机型对程序员来说似乎有些问题。如果您在 logcat 上没有看到任何特定于您的应用程序的内容,请拨打 *#*#2846579#*#* 并转到项目菜单 - 后台设置 - 日志设置并启用日志并指定日志记录级别。这是华为特有的,可能不适用于您的型号,但值得一试。

标签: android xamarin xamarin.android xamarin.forms media


【解决方案1】:

解决我设置的问题:

PhotoSize = PhotoSize.Small

在 StoreCameraMediaOptions 上:

var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions {
                    SaveToAlbum = true,
                    Directory = "MyDirectory",
                    PhotoSize = PhotoSize.Small
                };

但不是绑定到 AlbumPath,而是绑定到 Path:

来自 ViewModel 的属性(将 PRISM 用于 Xamarin 表单):

public MediaFile Photo {
            get {
                return photo;
            }
            set {
                SetProperty<MediaFile>(ref photo, value);
            }
    }


<Image Grid.Row="0" Grid.ColumnSpan="2" Source="{Binding Photo.Path}"></Image>

我意识到如果我在拍照后添加延迟:

await Task.Delay(5000)

图像会开始出现在相机胶卷文件夹中,但即便如此,图像也不会显示在屏幕上。

在 Visual Studio 中查看输出屏幕后,我注意到以下消息:

03-14 10:52:51.808 W/OpenGLRenderer(18106): Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)

然后我意识到问题与图像大小有关,但即使在 StoreCameraMediaOptions 上将图像大小设置为小,也没有任何区别。

似乎调整大小仅适用于内部应用程序存储图像,而不适用于存储在相机胶卷文件夹中的图像。

调整图像大小后,照片会在应用程序中正确显示。

【讨论】:

  • 似乎使用 PhotoSize 调整照片大小。小仅适用于位于“路径”属性的照片。经过几次测试后,它似乎只适用于 SaveToAlbum 为真。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2016-03-15
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多