Android 未在 ionic 应用程序中请求许可

Neg*_*ity 2 permissions android cordova ionic2

我正在构建允许人们发布图片和视频的应用程序,主要是尝试了解 ionic、cordova、android 等,但出于某种原因,每当我尝试使用cordova File 插件打开文件时,它都不会询问用户访问存储的权限,并且代码失败并且用户卡在加载屏幕上。代码非常简单,他们拍摄视频,进行转码,然后将转码后的文件上传到 firebase 存储桶。如果我退出应用程序,转到设置->应用程序->我的应用程序->权限,然后手动打开存储权限,它可以工作。问题是,我需要在运行时或安装时向用户询问权限,但事实并非如此。这是代码..

this.media.captureVideo().then(file => {
  this.editor.transcodeVideo({
    fileUri: file[0].fullPath,
    outputFileType: this.editor.OutputFileType.MPEG4,
    outputFileName: 'temp_test',
    saveToLibrary: false,
    height: 800,
    width: 800,
    maintainAspectRatio: false
  }).then(fileUri => {
    let pathIndex = fileUri.lastIndexOf('/'),
        finalPath = 'file://' + fileUri.substr(0, pathIndex), 
        name = fileUri.substr(pathIndex + 1, fileUri.length);
    this.file.readAsArrayBuffer(finalPath, name).then(file => {
        //upload
    }).catch(err => { console.log(err); });
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,这只适用于我打开手机上的设置,依次转到应用程序、我的应用程序、权限,然后手动启用存储。有什么方法可以在离子中请求许可吗?我已经搜索并搜索过,我能找到的所有答案都特定于相机,或者在 Java 中工作,但 ionic 不是 java。谢谢你。

Pab*_*ejo 5

有效的cordova-plugin-media-capture使用cordova-plugin-file,因此必须以编程方式询问READ_EXTERNAL_STORAGE权限。

Ionic 为Android 权限提供原生支持:

this.androidPermissions.hasPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
        .then(status => {
          if (status.hasPermission) {
            this.captureVideo();
          } else {
            this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
            .then(status =>{
              if(status.hasPermission) this.captureVideo();
            });
          }
        }
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。