首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理android 11问题的外部存储权限

管理android 11问题的外部存储权限
EN

Stack Overflow用户
提问于 2021-11-21 11:25:57
回答 1查看 3.2K关注 0票数 0

大家好,我想在我的代码中添加Android11及以上版本的存储权限,尽管添加了下面的权限()

代码语言:javascript
复制
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="29"
    tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

清单中的我不能访问android 11的存储程序,您能给我必要的代码来添加这个权限管理器吗?

代码语言:javascript
复制
public abstract class PermissionsManager implements ActivityCompat.OnRequestPermissionsResultCallback {
private Activity activity;
private boolean grantedPermissions;
private String[] permissions;
private int requestCode;

protected PermissionsManager(Activity activity) {
    this.activity = activity;
    ((MainActivity) activity).setOnRequestPermissionsResultListener(this);
}

private boolean notGrantedPermission(String permission) {
    return ContextCompat.checkSelfPermission(activity, permission) != PackageManager
            .PERMISSION_GRANTED;
}

public void checkPermissions(String permission, int requestCode) {
    try {
        checkPermissions(new String[]{permission}, requestCode);
    }//end try
    catch (Exception e){
        e.printStackTrace();
    }// end catch
}

public void checkPermissions(String[] permissions, int requestCode) {
    try {
        this.permissions = permissions;
        this.requestCode = requestCode;
        for (String permission : permissions) {
            if (notGrantedPermission(permission)) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {
                    showRequestPermissionRationale();
                } else {
                    requestPermissions();
                }
                break;
            } else grantedPermissions = true;
        }
        if (grantedPermissions) onPermissionsGranted();
    }//end try
    catch (Exception e){
        e.printStackTrace();
    }// catch
}

public void requestPermissions() {
    ActivityCompat.requestPermissions(activity, permissions, requestCode);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,  int[] grantResults) {
    for (int i = 0; i < permissions.length; i++) {
        if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
            if (!ActivityCompat.shouldShowRequestPermissionRationale(activity,
                    permissions[i])) {
                grantedPermissions = false;
                requestDisallowedAction();
            } else {
                grantedPermissions = false;
                onPermissionsDenied();
            }
            break;
        } else grantedPermissions = true;
    }
    if (grantedPermissions) onPermissionsGranted();
}

/**
 * add code here to tell users what permissions you need granted and why you need each
 * permission. Should call requestPermissions() after showing rationale.
 */
public abstract void showRequestPermissionRationale();

/**
 * add code here when permissions can't be requested. Either disable feature, direct user to
 * settings to allow user to set permissions, ask user to uninstall, or etc.
 */
public abstract void requestDisallowedAction();

public abstract void onPermissionsGranted();

public abstract void onPermissionsDenied();

}

EN

回答 1

Stack Overflow用户

发布于 2022-03-03 11:39:12

是的,是真的。虽然与Android 11和Android 10相比,由于安全问题,google更新了很多变化。

不,这不是许可问题。如果您尝试访问此路径mnt/sdcard/其限制现在。如果应用程序没有选择退出作用域存储,并请求READ_EXTERNAL_STORAGE许可。

请参考此链接https://developer.android.com/about/versions/11/privacy/storage

解决方案1-尝试使用此文件访问路径是Android/data/data/packageName/

我的意思是,如果您使用这个逻辑来访问文件- Environment.getExternalStorageDirectory()而不是上面的话,那么尝试this - Context.getExternalFilesDir(null)

解决方案2-如果您管理媒体文件,然后尝试引用此链接https://source.android.com/devices/media/media-provider

我希望它能帮助你..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70054066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档