Ждать разрешения в моем приложении? Xamarin формы - PullRequest
0 голосов
/ 23 февраля 2020

Кто-нибудь знал хитрость, чтобы дождаться разрешения на чтение / запись для пользователя на Xamarin? Я искал это, но не нашел хорошего решения без использования плагина.

Мое приложение не ожидает разрешения пользователя n, это означает, что когда мой код работает с каталогами устройств. VS возвращает исключение ...

EX

Мое приложение падает, когда я использую эту строку кода:

string path = Android.OS.Environment.ExternalStorageDirectory.Path;

List<string> files1 = System.IO.Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".pdf"))
.ToList();

Я не знаю если это происходит только на эмуляторе или на реальном устройстве.

Основная деятельность:

 protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.WriteExternalStorage }, 0);
        }

        if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != (int)Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage }, 0);
        }

        global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

Я знаю, что эти строки бесполезны:

if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.WriteExternalStorage }, 0);
        }

        if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != (int)Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage }, 0);
        }

Любой совет пожалуйста?

1 Ответ

0 голосов
/ 23 февраля 2020

Перед выполнением этой операции запросите разрешение пользователя и разрешите его, только если разрешение предоставлено, в противном случае отобразите предупреждение пользователя.

Вы можете использовать PermissionsPlugin для того же самого, что позволяет запрашивать разрешение и дать статус, если разрешение предоставлено или отказано. Пожалуйста, обратитесь к этому для более подробной информации: Как запросить у пользователя разрешение на доступ в Xamarin.forms

...