无法获得对 android 11 中存储目录的运行时权限

问题描述

我的项目存储目录:/storage/emulated/0/Android/data/myprojectapp

问题:在运行时获取我的项目目录的存储访问权限

在 AndroidManifest.xml 中添加了下面提到的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

检查运行时权限的代码

@Override
    public void onCreate(Bundle savedInstanceState){
        Log.d(TAG,"onCreate() [IN]");
        super.onCreate(savedInstanceState);
        if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_READ_EXTERNAL_STORAGE_CONSTANT);
        } else {
            setMainActivity();
        }
        
    }

@Override
    public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[],@NonNull int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_READ_EXTERNAL_STORAGE_CONSTANT: {
                // If request is cancelled,the result arrays are empty.
                if (grantResults.length > 0 &&
                        grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d(TAG,"permission granted"); // able to see this is the log as permission granted
                    setMainActivity();
                } else {
                    Toast.makeText(this,"Need sdcard permissions",Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

//After the permssion is granted in runtime below mentioned method is called
 private void setMainActivity() {
    static final String PKGPUSH_DIR = "/storage/emulated/0/Android/data/myprojectapp";
   //checking whether the  is writable or not
        File directory = new File(Constants.PKGPUSH_DIR);
        if(directory.canWrite()){
            Log.i(TAG,"set as writable "+directory);
        }else{
            Log.i(TAG,"Set as not writable"); // always it return the log as set as not writable
        }  


 }

首先在授予运行时权限后未创建目录 有人能告诉我为什么即使在授予运行时权限后也没有创建目录以及为什么它不能访问吗?

是不是因为 Android 11 范围的存储变化:

认配置{ applicationId“myprojectapp” minSdk 版本 26 目标SDK版本30 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...