栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

EasyPermissions使用和获取Android 11 所有文件管理器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

EasyPermissions使用和获取Android 11 所有文件管理器

EasyPermissions使用和获取Android 11 所有文件管理器 以请求获取写和读外部权限为例,Android 11以上需要额外文件管理权限,在最后有介绍 EasyPermissions官方github的链接

在Manifest中添加:




//android:requestLegacyExternalStorage="true"//此属性允许在设置中手动开启储存权限
在MainActivity中
private static final int RC_WRITE_AND_READ_EXTERNAL_STORAGE = 300;//识别码

@AfterPermissionGranted(RC_WRITE_AND_READ_EXTERNAL_STORAGE) //This is optional
    private void requireWriteAndReadExternalStoragePermission() {
        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
        if (EasyPermissions.hasPermissions(this, perms)) {
            // 已经拥有相关权限
            init();//初始化操作
        } else {
            // 没有拥有权限,去获取
            EasyPermissions.requestPermissions(this, getString(R.string.permissions),
                    RC_WRITE_AND_READ_EXTERNAL_STORAGE, perms);
        }
    }
重写和实现以下方法
@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

    @Override
    public void onPermissionsGranted(int requestCode, List list) {
        // 当权限授予后执行的操作
        init();
    }

    @Override
    public void onPermissionsDenied(int requestCode, List list) {
        //当权限被拒绝后执行的操作
        Toast.makeText(this, getString(R.string.permissions_error), Toast.LENGTH_SHORT).show();
         //下面这个将显示一个直接去设置里开启权限的对话框
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            new AppSettingsDialog.Builder(this)
                    .setPositiveButton(R.string.authorize_msg)
                    .setTitle(R.string.authorize_title_msg)
                    .setRationale(R.string.modify_permission_msg)
                    .build()
                    .show();
        }
    }

private boolean hasExteralPermissions() {
        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
        return EasyPermissions.hasPermissions(this, perms);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 从设置里返回后,对用户授予的权限进行判断
        if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {         
            if (hasExteralPermissions() ? true : false) {
                init();
            } else {
                Toast.makeText(this, "权限获取失败,即将关闭应用", Toast.LENGTH_SHORT).show();
                finish();//结束程序
            }
        }
        if (requestCode == 0x99){ 
            if (Environment.isExternalStorageManager() ? true : false) {
                init();
            } else {
                finish();
                Toast.makeText(this, "权限获取失败,即将关闭应用", Toast.LENGTH_SHORT).show();
            }
        }
    }

注意Android 11 需要授予所有文件的管理权限, 否则不可以运行

在Manifest额外添加:

只需改良以上方法:

@AfterPermissionGranted(RC_WRITE_AND_READ_EXTERNAL_STORAGE) //This is optional
    private void requireWriteAndReadExternalStoragePermission() {
        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
        if (EasyPermissions.hasPermissions(this, perms)) {
            // Already have permission, do the thing
            isManager();//修改这里! 如果是安卓11以上 获取文件管理者
        } else {
            // Do not have permissions, request them now
            EasyPermissions.requestPermissions(this, getString(R.string.permissions),
                    RC_WRITE_AND_READ_EXTERNAL_STORAGE, perms);
        }
    }

//添加以下
public boolean gtSdk30() { //获取当前系统版本是否安卓11以上
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R;
}
//R = 安卓11,O = 8, M = 6

private void isManager() {
        if (gtSdk30()) {
            if (Environment.isExternalStorageManager()) init();
            else getManager();
        } else init();
    }

private void getManager() {
        alertDialog alertDialog;
        alertDialog.Builder builder = new alertDialog.Builder(this, R.style.DialogStyle);//嫌麻烦,样式可设为null
        builder.setPositiveButton(getString(R.string.authorize_msg), null);
        builder.setTitle(getString(R.string.authorize_title_msg));
        builder.setMessage(getString(R.string.file_manger_msg));
        builder.setCancelable(false);
        alertDialog = builder.create();
        alertDialog.show();
        alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
            alertDialog.dismiss();//去获取文件管理
            Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, 0x99);
        });
    }



所需Res资源 string
	
    为了正常使用,需要以下权限!
    未能获取到相关权限
    
    点击前往授权
    缺少必要权限
    Android 11 需要授予所有文件的管理权限 
    应用不能正常运行,需要在设置里手动开启访问储存权限
theme


    

    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/705217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号