如何解决如何在Xamarin Forms应用程序中设置列出目录的权限
任何人都可以帮助解释Xamarin表单应用程序中的以下行为吗?
在我的MainActivity.cs文件中,如果我调用以下函数:
string szPicturesDirectory = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;
我得到:
“ /存储/模拟/ 0 /图片”
好的,很好。如果我现在打电话:
var dirs = Directory.EnumerateDirectories("/storage/");
List<string> workdirs = new List<string>(dirs);
我得到:
也可以。
但是如果我打电话给我,
var dirs = Directory.EnumerateDirectories(szPicturesDirectory);
我得到:
我添加了
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
到我的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.oglmobile">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="OGLMobile.Android" android:theme="@style/MainTheme"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
感谢您的帮助, 米奇。
解决方法
如果Android 6 (API 23)
或更高版本,则在应用程序运行期间在运行时请求许可。
尝试请求WriteExternalStorage
运行时权限。
在您的MainActivity中:
protected override void OnCreate(Bundle savedInstanceState)
{
...
if (CheckSelfPermission( Manifest.Permission.WriteExternalStorage) == Permission.Granted)
{
string szPicturesDirectory = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;
var dirs = Directory.EnumerateDirectories(szPicturesDirectory);
List<string> workDirs = new List<string>(dirs);
}
else
{
ActivityCompat.RequestPermissions(Instance,new string[] { Manifest.Permission.WriteExternalStorage },1);
}
...
}
public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);
base.OnRequestPermissionsResult(requestCode,grantResults);
if (requestCode == 1)
{
if (grantResults[0] == Permission.Granted)
{
string szPicturesDirectory = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;
var dirs = Directory.EnumerateDirectories(szPicturesDirectory);
List<string> workDirs = new List<string>(dirs);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。