Ошибка выбора файла, выбор файлов из папки «Загрузки» - PullRequest
0 голосов
/ 30 июня 2019

Плагин File Chooser работает нормально, но в некоторых ситуациях это не так:

  1. Я могу выбрать файл, но он не обрабатывается. Это из-за разрешения не было предоставлено. Выбор файла не вызывает разрешение!?

* Мне пришлось запросить разрешение вручную

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

  1. Когда было предоставлено разрешение, выбор файла из любой папки будет работать, за исключением того, что если я попытаюсь из папки Загрузки, он не будет работать. Я тестировал на Huawei Y9 и эмуляторе с API 28 android 9 он не работал. Тем не менее, я тестировал на Samsung Note 4, он работал!.

* если файлы были выбраны из приложения для Android под названием «Файлы», проблем не будет.

какое-либо решение для этой проблемы?


upload(file) {
        this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE).then(res => {
          this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE).then( per => {
            this.fileChooser.open().then((path) => {
              this.filePath.resolveNativePath(path).then(nativeFilePath => {
                console.log(nativeFilePath);
                this.setFileName(file, nativeFilePath);

                this.setFilePath(file, nativeFilePath)

                setTimeout(()=>{ 
                  this.checkFile(file)
                }, 1000)

              }).catch(err => console.log('ERROR: '+JSON.stringify(err)));

            }).catch(e => console.log('uri'+JSON.stringify(e)));
          }).catch(err => {
            console.log(err);
          });
        }),(err => {
          this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE);
        });
      }

    setFileName(file, Pathfile) {

        this.file.resolveLocalFilesystemUrl(Pathfile).then((res)=>{

          file.fileName = res.name;

        }).catch((err)=>{
          console.log("error name: "+ JSON.stringify(err));
        })
      }

      setFilePath(file, Pathfile) {

        this.file.resolveLocalFilesystemUrl(Pathfile).then((fileData)=>{
          if (Pathfile) {
            file.fileName = fileData.name;
            file.fileType = fileData.name.split(".").pop().toString(),
            file.filePath = fileData.nativeURL;

          }else {
            console.log("error: file path")
          }

        }).catch((err)=>{
          console.log("error file path: "+JSON.stringify(err));
        })
      }

Downloads folder

Из журнала консоли:

это путь, который я получаю content: //com.android.providers.downloads.documents/document/16

при попытке resolNativePath () появляется следующее сообщение об ошибке:

ОШИБКА: «Попытка вызвать метод интерфейса« int android.database.Cursor.getColumnIndexOrThrow (java.lang.String) 'для ссылки на пустой объект »

Обновление:

Протестировано на эмуляторе и устройстве с Android 6 API 23, выбор файлов из папки «Загрузки» работал без проблем:

  • путь: content://com.android.providers.media.documents/document/image%3A40

  • resolNativePath: file:///storage/emulated/0/Android/data/com.android.browser/files/Download/2019-06-27-10-02-12--1835644526.jpg

Было протестировано изображение и файл PDF

On android 6 it works fine

Вывод:

File Chooser имеет проблему с выбором файлов из папки «Загрузки». Эта проблема возникает в Android 7, 8, 9. На версии 6 для Android выбор файлов работал нормально.

информация о проекте:

Ionic:

   Ionic CLI          : 5.1.0 (C:\Users\asalhajri\AppData\Roaming\npm\node_modules\ionic)
   Ionic Framework    : ionic-angular 3.9.2
   @ionic/app-scripts : 3.1.11

Cordova:

   Cordova CLI       : 8.1.2 (cordova-lib@8.1.1)
   Cordova Platforms : android 7.1.4
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.1.2, (and 15 other plugins)

Utility:

   cordova-res : 0.3.0
   native-run  : 0.2.5

System:

   NodeJS : v8.11.3 (C:\Program Files\nodejs\node.exe)
   npm    : 6.9.0
   OS     : Windows 10
...