文件选择器问题,从“下载”文件夹中选择文件

时间:2019-06-30 05:48:01

标签: android typescript cordova ionic-framework filechooser

文件选择器插件可以正常工作,但在某些情况下不能:

  1. 我可以选择一个文件,但是无法处理。这是由于未授予应有的许可。选择文件不会提示权限!?

*我必须手动请求权限

*如果我代替拍照,则会显示权限提示。授予权限后,我可以返回并选择一个文件,它将正常运行。

  1. 由于已授予权限,因此从任何文件夹中都可以选择一个文件,除非我从Downloads文件夹中尝试该文件不起作用。我在华为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

当尝试 resolveNativePath()时,出现以下错误消息:

错误:“试图在空对象引用上调用接口方法'int android.database.Cursor.getColumnIndexOrThrow(java.lang.String)'”

更新:

在具有Android 6 API 23的模拟器和设备上进行了测试,从“下载”文件夹中选择文件可以正常工作,不会引起任何问题:

  • 路径:content://com.android.providers.media.documents/document/image%3A40

  • resolveNativePath: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

结论:

文件选择器从“下载”文件夹中选择文件时出现问题。此问题出现在Android 7、8、9中。在android版本6中,文件选择器正常工作。

项目信息:

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

0 个答案:

没有答案