当前位置: 首页 > 知识库问答 >
问题:

如何在Android 11中获取存储权限

章海
2023-03-14

我的话题,我试图在android中获取存储权限,我的权限代码在andoid 11下方工作,但问题是当我尝试在android 11中获取存储权限时,代码不起作用,所以请帮助我…

这是我的代码:-

这是我的AndroidManifest.xml

Android:requestlegacyexternalstarge = " true "

这是我的JavaCode代码

@Override 
 protected void onActivityResult(int _requestCode, int _resultCode, Intent _data) { 
  super.onActivityResult(_requestCode, _resultCode, _data); 
  if (_resultCode == RESULT_OK){
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
              if (Environment.isExternalStorageManager()){
                    Toast.makeText(this,"Permission Granted",Toast.LENGTH_SHORT).show();
        i.setClass(getApplicationContext(), Main2Activity.class); 
        startActivity(i);
                } else {
                    _takePermission();
                }
          }
  } 
  switch (_requestCode) { 
    
   default: 
   break; 
  } 
 }


public boolean _isPermissionGranted() { 
  if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
   
       return Environment.isExternalStorageManager();
  } else  {
   
       int readexternalStoragePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
       return  readexternalStoragePermission == PackageManager.PERMISSION_GRANTED;
  } 
 }



public void _takePermission() { 
  if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R) {
       try {
            Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            intent.addCategory("android.intent.category.DEFAULT");
            intent.setData(Uri.parse(String.format("package:%s",getApplicationContext().getPackageName())));
            startActivityForResult(intent,100);
        } catch (Exception exception){
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            startActivityForResult(intent,100);
        }
  } else {
       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},101);
  } 
 } 
  
  
  @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      if (grantResults.length > 0){
           if (requestCode == 101){
                boolean readExternalStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                if (readExternalStorage){
                     Toast.makeText(this,"Permission Granted",Toast.LENGTH_SHORT).show();
     i.setClass(getApplicationContext(), Main2Activity.class); 
     startActivity(i);
                 } else {
                     _takePermission();
                 }
            }
       }

以上是完整的代码,请检查并告诉我我的错误是什么,正确的桥是什么。

感谢您的观看..

共有1个答案

竺和洽
2023-03-14

Android:requestlegacyexternalstarge = " true "不会影响您的应用是否针对Sdk

>

  • 必须将此添加到清单:

    请求许可:

        ActivityCompat.requestPermissions(this,
                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                                    Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 1);
    
        if (!Environment.isExternalStorageManager()) 
    
        Intent intent = new Intent();
                        intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                        Uri uri = Uri.fromParts("package", this.getPackageName(), null);
                        intent.setData(uri);
                        startActivity(intent);
    
    

  •  类似资料:
    • 我想在Android11上读一个OTG USB,我可以在Android9上列出这样的文件: 问题是为什么我在Android 11上可以读取外存,却不能读取OTG USB?我想要能够在Android11上读取USB OTG。

    • 我的应用程序在10版以下运行良好,但Android11及更高版本不支持外部存储。我的选取器没有选取任何文档文件。但在清单中授予manageexternalstorage权限后,googleplaystore没有批准我的应用程序。如果您知道所有文件访问权限的替代解决方案,请提供帮助。

    • 问题内容: 我使用的是SQL Server2005。我创建了一个大多数时候都可以使用的存储过程,但是我发现了一个实例,它无法满足我的要求。 目前,代码执行的操作是这样的 输出变量在哪里。 因此,我可以得到一个数字,但我真正想要的只是SQL错误。 像 Hey之类的 东西 ,我不能这样做,因为在此列上有fk约束 或其他 约束 。我在msdn http://msdn.microsoft.com/zh-

    • 我有一个JTable,我可以在其中添加具有几个属性的用户,如年龄、名称等。这起作用了,用户被添加到我的arraylist和JTable中。现在我想要的是,当我选择JTable行时,能够获得存储在用户的arrayList中的对象,以便我可以修改或删除它们。 有谁能帮我一下吗?谢谢!

    • 我正在尝试调用我的类来检查存储权限 但问题是,它不让我在一个类中实现它,我得到了以下错误- "类型权限的方法onRequest estPermissionsResult(int, String[], int[])必须覆盖或实现超类型方法" 类型权限的方法requestPermissions(字符串[],int)未定义 这是我的密码- }

    • 我正在尝试在我的Android10(API29)设备上获得MANAGE_EXTERNAL_STORAGE权限。 https://developer.android.com/training/data-storage/manage-all-files 清单: 主要活动: 但我怎样才能得到那个许可呢?