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

时间:2019-09-25 18:45:15

标签: c# xamarin plugins xamarin.android

非常奇怪的情况。我的xml文件完全按照自述文件中的说明进行设置。但是,当我尝试访问CrossMedia.Current.TakePhotoAsync()时,出现以下异常:

  

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

但是,这是我的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()函数的代码

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");
}

1 个答案:

答案 0 :(得分:1)

看看答案here

  

报价

     

@ Kevelop 说:

     

当我使用下面的file_paths.xml文件时(恰如mediaPlugin自述文件中所述!)

<?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设置中默认的内存位置设置为内存时,此选项才有效。设置为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>
     

它适用于两者内部存储器和SD卡。