PCLStorage NuGetPackage не позволяет создавать папку или файл на устройстве - PullRequest
1 голос
/ 26 января 2020

У меня проблема с созданием папки с пакетом nuget PCLStorage, я не могу создать папку. Ничего не появляется внутри моей папки с файлами. Я использую мое устройство, а не эмулятор. android версия 8.0

public async Task WriteDataAsync(string filename, string data)
        {
            string folderName = "SignatureSotrage";
            IFolder folder = FileSystem.Current.LocalStorage;

            folder = await folder.CreateFolderAsync(folderName, CreationCollisionOption.ReplaceExisting);
        }

Вот код, где я запускаю эту функцию:

public ICommand AddCustomerCommand => new Command(async () =>
        {
            Signature = await SignatureFromStream();
            // Signature should be != null

            var customer = new Customer()
            {
                FullName = this.FullName,
                IsAccepted = this.IsAccepted,
                Birthday = this.Birthday
            };

            if(Signature != null)
            {
                customer.Image = this.Signature.ToString();
            }
            else
            {
                await Application.Current.MainPage.DisplayAlert("Błąd", "Nie wszystkie pola zostały poprawnie wypełnione", "OK");
                return;
            }
            await DependencyService.Get<IFileHelper>().WriteDataAsync("signature.txt", "this is file");
            //_context.Customers.Add(customer);
            //_context.SaveChanges();
        });

Ответы [ 2 ]

0 голосов
/ 27 января 2020

вы отладили свой код и проверили, действительно ли файл / папка создается вашим кодом или он входит в блок catch и идет с нормальным потоком?

Проверять UserPermissions каждый раз для чтения и разрешение на запись перед выполнением каких-либо операций с хранилищем. Вы можете добавить пакет Nugget Plugin.Permission, он обрабатывает все за вас, он добавляет оба разрешения в манифест.

Для проверки полномочий пользователя всегда пытайтесь вызвать CheckForStoragePermissions () перед выполнением каких-либо операций с хранилищем. (* DialogService такое CustomDialogBox)

           if( !await CheckForStoragePermissions() ) 
            {
                DialogService.Alert("Invalid Permission", "User declined permission for this action");
                return;
            }


    private async Task<bool> CheckForStoragePermissions()
    {
        PermissionStatus storagePermissionStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);
        if (storagePermissionStatus != PermissionStatus.Granted)
        {
            Dictionary<Permission, PermissionStatus> storagePermissionResult = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Storage);
            if (storagePermissionResult.ContainsKey(Permission.Storage))
            {
                storagePermissionStatus = storagePermissionResult[Permission.Storage];
            }
        }
        return storagePermissionStatus == PermissionStatus.Granted;
    }
0 голосов
/ 27 января 2020

Я тестирую пример кода на GitHub. https://github.com/dsplaisted/PCLStorage

На основании моего теста путь к папке будет выглядеть следующим образом:

/data/user/0/PCLStorage.Test.Android/files/

Это внутреннее хранилище. Вы не могли видеть файлы без разрешения root. https://docs.microsoft.com/en-us/xamarin/android/platform/files/#working -with-internal-storage

Если вы хотите просмотреть файлы во внутреннем хранилище, вы можете использовать инструмент adb. Пожалуйста, обратитесь к пути в ссылке. Как записать имя пользователя в локальный текстовый файл при успешном входе в систему и проверить файл для следующего входа в систему?

...