非常奇怪的情况。我的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");
}
答案 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卡。