不使用MANAGE_EXTERNAL_STORAGE权限,适配Android11保存图片和分享图片

本文介绍了如何在Android11及更高版本中,不使用MANAGE_EXTERNAL_STORAGE权限来实现图片的保存和分享。适配过程中,通过ImageLoader获取Bitmap,然后使用特定方法保存图片,并通过FileProvider配置来实现第三方应用的文件分享,以兼容微信、微博等社交平台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、其实Android11(targetSdkVersion 30)及以上在AndroidManifest.xml声明MANAGE_EXTERNAL_STORAGE权限(不在AndroidManifest.xml声明获得“所有文件访问权限”按钮为灰色不能授权)在加上下面的判断就能基本解决问题:

    //获取存储权限
    private void getPermissions() {
//        普通权限:只需要在清单文件中注册即可
//        危险权限(Android 6.0 之后):需要在代码中动态申请,以弹系统 Dialog 的形式进行请求
//        特殊权限(Android 11(含) 之后):需要在代码中动态申请,以跳系统 Activity 的形式进行请求
        //android版本大于等于11
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//必须要MANAGE_EXTERNAL_STORAGE权限,但Google Play Console审核不通过
            // 先判断有没有权限
            if (Environment.isExternalStorageManager()) {
                new Thread(saveFileRunnable).start();
            } else {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 0);
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                //存储空间权限
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
            } else {
                //有权限后需要处理的功能
            }
        } else {
            //有权限后需要处理的功能
        }
    }

    // 提示是否獲取存储空间权限
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 0:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 取得权限
                    //有权限后需要处理的功能
                } else {// 未取得权限
                    Toast.makeText(getApplicationContext(), getString(R.string.language_noPermissions), Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }

    /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值