c# - 我正在尝试编写一个 xamarin 表单应用程序来简单地拍照并保存图像,
问题描述
我得到的错误如下
System.ArgumentException: '无法获取文件位置。这很可能意味着您的 Android Manifest 文件中未设置文件提供程序信息。
我已经完成了我能找到的关于文件提供者权限的所有建议,但无济于事它失败的代码是..
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "",
SaveToAlbum = true
});
(我尝试将“目录”设置为“图像”、“图片”以及您能想到的任何其他内容!
资源/file_paths.xml 是...
<?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>
我的 AndroidManifest .xml 是...
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.app1" android:installLocation="auto">
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28" />
<application android:label="App1.Android" android:icon="@drawable/Woodstonelogo"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="App1.Android">
<provider android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.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>
</manifest>
解决方案
原因: 在您的AndroidManifest.xml中,您定义了两个应用程序标签。所以第一个将在默认情况下工作。所以提供者永远不会像第二个标签那样被设置。
解决方案:
修改代码如下
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.app1" android:installLocation="auto">
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28" />
<application android:label="App1.Android" android:icon="@drawable/Woodstonelogo">
<provider android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.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" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>
推荐阅读
- c# - Kestrel:访问它正在侦听的 IP+端口对
- android - 如何从名称中检索 Android 资源(在 Kotlin 中)?
- vb.net - 我应该如何发送我使用 DataGridViewCellFormattingEventArgs 的 DataGrid 结果
- yii2 - Yii2:在注册模型中添加分配角色
- makefile - Boost.Python Makefile 到 CMakLists.txt
- c# - 在统一中,asmdef 不能引用 Assembly-CSharp
- c++ - 如何使用 lambda 作为 std::unique_ptr 的删除器?
- html - 数据未从 HTML 表更新到 Excel
- sql - sql查询,它查找某些数据所在的每个组中有多少行
- dart - 如果更改返回值类型为什么不更改页面