繁体   English   中英

Xamarin Plugin.Media “无法获取文件位置”

[英]Xamarin Plugin.Media “Unable to get file location”

很奇怪的情况。 我的 xml 文件完全按照自述文件所说的方式设置。 然而,当我尝试访问 CrossMedia.Current.TakePhotoAsync() 时,我得到以下异常:

无法获取文件位置。 这很可能意味着您的 Android 清单文件中未设置文件提供程序信息。 请查看有关如何在您的项目中进行设置的文档。

但是,这是我的 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.clipidapp" android:installLocation="preferExternal">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="ClipIDApp.Android">
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.companyname.clipidapp.fileprovider" android:exported="false" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
        </provider>
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

这是file_paths

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <external-files-path name="my_images" path="Pictures" />
  <external-files-path name="my_movies" path="Movies" />
</paths>

这是我尝试访问 TakePhotoAsync() function 的代码

try {
    _mediaFile = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
    {
        Directory = "temp",
        SaveToAlbum = false,
        CompressionQuality = 75,
        CustomPhotoSize = 50,
        PhotoSize = PhotoSize.MaxWidthHeight,
        MaxWidthHeight = 2000,
        DefaultCamera = CameraDevice.Front,
        Name = "test.jpg"
    });
    if (_mediaFile == null) return;
    image.Source = ImageSource.FromStream(() =>
    {
        var stream = _mediaFile.GetStream();
        return stream;
    });
}
catch(Exception Ex) 
{
    await Current.MainPage.DisplayAlert("Error", Ex.Message, "OK");
}

看看这里的答案

引用

@Kevelop说:

当我使用下面的 file_paths.xml 文件时(正如 mediaPlugin README 中提到的那样!)

 <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="my_images" path="Pictures" /> <external-files-path name="my_movies" path="Movies" /> </paths>

仅当 Android 设置中 memory 的默认位置设置为内部 memory 时,它才有效。 当设置为 SD 卡时,它不起作用

当我将 file_paths.xml 文件更改为此:

 <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="Android/data/com.plugin.mediatest/files/Pictures" /> </paths>

它适用于内部memory和 SD 卡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM