如何在android 11中实现存储权限。有人可以分享一个用java实现的例子

Posted

技术标签:

【中文标题】如何在android 11中实现存储权限。有人可以分享一个用java实现的例子【英文标题】:How to implement storage permission in android 11. Can someone share an example implemented in java 【发布时间】:2021-12-20 00:43:56 【问题描述】:
Intent chooserIntent = null;
       try 
           StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
           StrictMode.setVmPolicy(builder.build());
   
           List<Intent> intentList = new ArrayList<>();
           Intent pickIntent = new Intent(Intent.ACTION_PICK,
                   MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
           Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
           takePhotoIntent.putExtra("return-data", true);
           takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
           intentList = addIntentsToList(context, intentList, pickIntent);
           intentList = addIntentsToList(context, intentList, takePhotoIntent);
   
           if (intentList.size() > 0) 
               chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1),
                       "Select photo !");
               chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]));
           
           return chooserIntent;
       catch (Exception e)
           e.printStackTrace();
       

在将版本设置为 30 后,我的意图大小为 0 ,但在以前的版本中它工作正常。

【问题讨论】:

在清单中添加以下代码后,我可以从图库中选择图像 这个严格模式有什么用?您无需查询即可选择图像。 你的代码应该做什么?它与您的帖子标题有什么关系? 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

添加权限

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

添加此行清单文件应用程序标记

android:requestLegacyExternalStorage="true"

在你的活动中使用这些变量

private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = 
        Manifest.permission.WRITE_EXTERNAL_STORAGE
;

在Activity的onCreateView方法中

int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) 
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                MainActivity.this,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    

    else 

       //write code for permission granted 
    

【讨论】:

奇怪的代码。不需要这些权限即可使用 ACTION_PICK 或 ACTION_GET_CONTENT。那么你的想法是什么?

以上是关于如何在android 11中实现存储权限。有人可以分享一个用java实现的例子的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中实现时间线范围滑块

在 Android M 中实现新权限 [重复]

如何在基于 SQLite 的 recyclerview 中实现 searchview? - 安卓

如何在android中实现跨进程锁?

如何在 android 中实现 Exoplayer 2.11.1?

如何检测权限对话框被用户拒绝