繁体   English   中英

在尝试访问文件系统之前,如何确保我的Android 6 Cordova应用程序提示用户授予权限?

[英]How can I ensure that my Android 6 Cordova app prompts the user to give permission before attempting to access the filesystem?

我正在将Cordova 3.4应用程序升级到Cordova 6.0,同时将部署平台(Nexus平板电脑)从Android 4.4升级到Android 6.作为其中的一部分,我已经从v0.2.5升级了文件系统插件cordova-plugin-file到v4.1.1

首次运行时,应用程序在共享文件系统( file:///storage/emulated/0/ )上创建10个文件夹的目录结构。 我已经在config.xml中添加了以下首选项,以确保在新版本的应用程序中使用相同的位置:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />

我知道Android 6中有一个新的权限模型,用户必须单独允许应用程序请求的每个权限。

如果设备运行的是Android 6.0(API级别23)或更高版本,并且应用程序的targetSdkVersion为23或更高,则应用程序会在运行时请求用户的权限。 Android开发者文档

当安装在已安装早期版本(并且已卸载)且已创建目录结构的平板电脑上时,我的应用程序的新版本在首次运行时按预期执行,提示用户允许访问文件系统的权限。

但是,当安装在从未安装过应用程序的平板电脑上时(或者当我删除早期版本创建的目录结构时),应用程序会因抛出FileError.PATH_EXISTS_ERR错误而失败。 它不会提示用户允许按预期访问文件系统的权限。

我已经检查过,在构建应用程序时,生成的AndroidManifest.xml确实包含必要的权限属性:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我目前的解决方法是停止应用,导航到设置>应用> MyApp>权限,并再次运行应用之前手动启用“存储”权限。 但我真的不希望我的用户必须这样做!

在实际尝试访问文件系统之前,如何确保应用程序确实提示用户提供所需的权限?

以下是我的代码的一些示例:

window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 4000 * 1024 * 1024, gotFileSystem, errorHandler);

function gotFileSystem(fileSystem) {

    // store reference to file system
    fs = fileSystem;
}

function createDir(directoryName) {

    var directoryCreated = when.defer();

    fs.root.getDirectory(directoryName, {
            create: true
        }, function (dirEntry) {            
            directoryCreated.resolve();
        }, function(e) {
            directoryCreated.reject(e);
        }
    );

    return directoryCreated.promise;
}

升级到Android 6(MArshmallow)后面临完全相同的问题。 Cordova文件插件(v 4.1.1)与Android Marshmallow存在权限问题。 此问题不允许在android文件系统中创建文件夹,从而导致路径存在错误。

此问题现已解决。 您可能必须从cordova文件插件github中的android src文件夹中提取最新的FileUtils.java才能使其正常工作。 更新插件后,首次访问文件系统时,应用程序会请求用户访问权限。 从那时起,后续请求工作正常。 检查Apache问题跟踪器中的CB-10798以获取相关信息。 希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM