Vikram Anand Bhushan
Vikram Anand Bhushan

Reputation: 4886

Cordova permissions not working as expected

So to check permission here is the code that I have written

const checkFilePermission = () => {
    let perms = ["android.permission.MANAGE_EXTERNAL_STORAGE",
    ]
    let permissions = cordova.plugins.permissions;
    permissions.checkPermission("android.permission.MANAGE_EXTERNAL_STORAGE", function (status) {
        console.log('success checking permission');
        console.log('HAS MANAGE_EXTERNAL_STORAGE:', status.hasPermission);
        console.warn(status.hasPermission);
        if (!status.hasPermission) {
            permissions.requestPermissions(perms, function (status) {
                console.log('success requesting MANAGE_EXTERNAL_STORAGEN permission');
            }, function (err) {
                console.log('failed to set permission');
            });
        }
    }, function (err) {
        console.log(err);
    });
}

In the logs, I see this

[INFO:CONSOLE(433)] "success checking permission", source: file:///android_asset/www/popup.js (433)
2021-02-16 01:45:34.701 11520-11520/com.hypersign.cordova I/chromium: [INFO:CONSOLE(433)] "HAS MANAGE_EXTERNAL_STORAGE:", source: file:///android_asset/www/popup.js (433)
2021-02-16 01:45:34.701 11520-11520/com.hypersign.cordova I/chromium: [INFO:CONSOLE(433)] "false", source: file:///android_asset/www/popup.js (433)
2021-02-16 01:45:34.720 4154-6960/? I/ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.google.android.packageinstaller cmp=com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity (has extras)} from uid 10097
2021-02-16 01:45:35.041 11520-11520/com.hypersign.cordova I/chromium: [INFO:CONSOLE(433)] "success requesting MANAGE_EXTERNAL_STORAGEN permission", source: file:///android_asset/www/popup.js (433)

You can observe that it's printing the "Success requesting External storage" but I never see a permission popup and the value of status is always false.

Would appreciate some help

Thanks

Upvotes: 2

Views: 1403

Answers (1)

Vikram Anand Bhushan
Vikram Anand Bhushan

Reputation: 4886

So I was able to fix this, Just dumping the solution so it can be referenced for later use.

const checkFilePermission = () => {
    return new Promise((resolve, reject) => {
        let permissions = cordova.plugins.permissions;
        permissions.checkPermission(permissions.WRITE_EXTERNAL_STORAGE, function (status) {
            // console.log('success checking permission');
            // console.log('HAS MANAGE_EXTERNAL_STORAGE:', status.hasPermission);
            // console.warn(status.hasPermission);
            if (!status.hasPermission) {
                permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, function (status) {
                    // console.log('success requesting MANAGE_EXTERNAL_STORAGEN permission');
                    // console.log('HAS MANAGE_EXTERNAL_STORAGE:', status.hasPermission);
                    return resolve(true)
                }, function (err) {
                    console.log('failed to set permission');
                    return reject(err)
                });
            } else {
                return resolve(true)
            }
        }, function (err) {
            console.log(err);
            return reject(err)
        });
    });
}

Please observe the following line

permissions.WRITE_EXTERNAL_STORAGE

Thanks

Upvotes: 1

Related Questions