Android 未在 ionic 应用程序中请求权限

标签 android cordova permissions ionic2

我正在构建允许人们发布图片和视频的应用程序,主要是想了解 ionic、cordova、android 等,但由于某种原因,每当我尝试使用 cordova 文件插件打开文件时,它不会如果不询问用户访问存储的权限,代码就会失败并且用户会卡在加载屏幕上。 代码非常简单,他们拍摄视频,对其进行转码,然后将转码后的文件上传到 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); });
  });
});

但是,只有当我打开手机上的设置,转到应用程序,然后转到我的应用程序,然后转到权限,然后手动启用存储时,这才有效。有什么方法可以请求 ionic 许可吗?我搜索了又搜索,我能找到的所有答案都是特定于相机的,或者在 Java 中工作,但 ionic 不是 java。谢谢。

最佳答案

有效cordova-plugin-media-capture使用cordova-plugin-file ,所以READ_EXTERNAL_STORAGE必须以编程方式请求许可。

Ionic 提供对 Android Permissions 的 native 支持:

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();
            });
          }
        }

希望有帮助。

关于Android 未在 ionic 应用程序中请求权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143238/

相关文章:

python - 检查 Django REST Framework 中相关对象的权限

ios - 如何使用 AWS iOS SDK 从设备上传图像并设置为公开

Android客户端使用Socket发送大文件,服务器收到的文件不完整

android - 使用PhoneGap在手机平台上迁移我的电子商务网站

android - 如何使用 BLE 将应用程序通知从一部 Android 手机传递到另一部 Android 手机

android - Ionic/cordova s​​udo ionic platform add android 不工作

html - Apache Cordova 多设备混合应用程序的 Package.appxmanifest 设置

java - 如何从字符串日期获取日、月、年?

reactjs - Cordova + 在开发模式下进行热重载 react

amazon-web-services - 从 Cloudformation 设置 QueuePolicy 在堆栈创建时不会生效 - 但在创建后设置相同的策略会生效