微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Xamarin Forms应用程序中设置列出目录的权限

如何解决如何在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);

我得到:

enter image description here

也可以。

但是如果我打电话给我,

var dirs = Directory.EnumerateDirectories(szPicturesDirectory);

我得到:

enter image description here

添加

<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 举报,一经查实,本站将立刻删除。