ActivityCompat.requestPermissions 在 Android sdk 目标 33 中不显示对话框

问题描述 投票:0回答:1

Android 目标 SDK 版本 33

权限为READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE和CAMERA

在OnCreate方法中我调用ActivityCompat.requestPermissions

@Override
protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().setNavigationBarColor(mContext.getResources().getColor(R.color.water_color));
        }

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            requestStoragePermission();
        }
    }

按照此处提出的示例: ActivityCompat.requestPermissions 在 Android 中不显示对话框

@RequiresApi(api = Build.VERSION_CODES.M)
    private void requestStoragePermission() {

        if (ContextCompat.checkSelfPermission(this,
                android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
            && ContextCompat.checkSelfPermission(this,
                android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
            && ContextCompat.checkSelfPermission(this,
                android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
            return;

        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
        }

        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        }
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                android.Manifest.permission.CAMERA)) {
        }

        ActivityCompat.requestPermissions(this, new String[]
                {
                        android.Manifest.permission.READ_EXTERNAL_STORAGE,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        android.Manifest.permission.CAMERA
                }, STORAGE_PERMISSION);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {


        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == STORAGE_PERMISSION) {
            //If permission is granted
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(mContext, mContext.getString(R.string.permission_granted), Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(mContext, mContext.getString(R.string.permission_denied), Toast.LENGTH_SHORT).show();
            }
        }
    }

带有权限请求的对话框不会出现,实际上,当触发 onRequestPermissionsResult 方法时,我只看到指示权限被拒绝的 toast

最终在Manifest文件中获得权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
android android-permissions
1个回答
0
投票

在 33,34 设备上,您不应再请求 WRITE/READ_EXTERNAL_STORAGE。

默认情况下,您对外部存储上的所有公共目录拥有写入权限。

© www.soinside.com 2019 - 2024. All rights reserved.