Xamarin表单应用程序需要在AndroidManifest中重复WRITE_EXTERNAL_STORAGE条目.&



我在Xamarin Forms应用程序中遇到了一个非常奇怪的问题。我试图在我的应用程序中拍照,然后使用OCR读取文本,但我正在努力获得WRITE_EXTERNAL_STORAGE授予的权限。我现在必须在我的AndroidManifest中声明WRITE_EXTERNAL_STORAGE两次,以便应用程序允许我请求存储权限或访问存储,一次作为自关闭标签,一次带有显式标签:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

如果任何一个被删除(只留下一个版本的WRITE_EXTERNAL_STORAGE),当试图请求外部存储权限或试图捕获图片时,我得到以下例外:"你需要在你的AndroidManifest.xml"中声明使用权限:android.permission.WRITE_EXTERNAL_STORAGE

这只影响WRITE_EXTERNAL_STORAGE…清单中声明的所有其他权限(使用自关闭标记)都可以正常工作。只是写存储权限需要这个"hack"。

此问题发生在仿真设备(调试模式)和物理设备(通过Play Store alpha轨道)上,当只列出一个权限实例时。当在manifest中调试这两行时,应用程序能够成功获得存储权限,并且我可以按照预期拍摄照片。Play商店将不接受清单中有重复行的提交,因此我无法使用此"hack">

向商店提交。这是我的AndroidManifest(没有PII)的完整副本,包括我必须包含的重复行,以便在调试时成功授予存储权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="myapp" android:versionName="3.2.2" android:installLocation="auto" android:versionCode="59">
<application android:theme="@android:style/Theme.Material.Light" android:icon="@drawable/Icon120" android:label="MyApp">
<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-feature android:name="android.hardware.camera" android:required="true" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
</manifest>

在我的AssemblyInfo.cs文件中也有以下行:

[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]

当我试图通过Xamarin请求权限时。必需品或通过Xamarin访问相机拍照。必需品或CrossMedia,应用程序爆炸与上述例外,声称我错过了WRITE_EXTERNAL_STORAGE权限,尽管它是在清单一次(无论是自关闭或显式标签)。执行这些行中的任何一行都将导致异常,并且当WRITE_EXTERNAL_STORAGE的两个条目都存在时,所有行都可以工作:

var permissionStatus = await Xamarin.Essentials.Permissions.RequestAsync<Xamarin.Essentials.Permissions.StorageWrite>();
var photo = await Xamarin.Essentials.MediaPicker.CapturePhotoAsync(new Xamarin.Essentials.MediaPickerOptions { Title = DateTime.Now.ToString("G") + ".jpg" });
var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions { Name = DateTime.Now.ToString("G") + ".jpg" });

我已经尝试更新我所有的NuGet包,现在是应用程序框架的最新版本(Xamarin Forms v5和Xamarin。Essentials 1.6.1),但是这个问题仍然存在。我也试过完全删除清单并从头开始,但同样的"黑客"。仍然需要。

有没有人遇到这个或有任何想法,这可以如何修复?

提前感谢!

对于任何有此问题的人,解决方案是删除对HockeySDK.Xamarin的所有引用并卸载NuGet包。一旦我删除了与此相关的所有内容,问题就会自行解决,并且我不再有清单

的问题。

最新更新