Android 13媒体文件访问权限适配

转载自:# Google技术征文 # Android 13媒体文件访问权限适配-51CTO开发者训练营-51CTO.COM

众所周知,从Android 4.4(Api Level 19)开始,开发者想要开发访问其他应用向外部存储空间提供的媒体文件的功能,譬如自定义用户头像、发送图文评论、播放音乐和剪辑视频等,都需要一个重要的权限——READ_EXTERNAL_STORAGE。而Android 13(Api Level 33)则将READ_EXTERNAL_STORAGE进一步细分成为了读取图片的READ_MEDIA_IMAGE、读取视频的READ_MEDIA_VIDEO和读取音频的READ_MEDIA_AUDIO,本文主要介绍在媒体文件权限方面如何适配Android 13
首先要在AndroidManifest中对声明权限做如下修改:









然后在代码中申请权限:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
   ActivityCompat.requestPermissions( activity,new String[]{
           READ_MEDIA_IMAGES,
           READ_MEDIA_AUDIO,
           READ_MEDIA_VIDEO
   },MEDIA_READ_REQUEST_CODE);
}else{
   ActivityCompat.requestPermissions( activity,new String[]{
           READ_EXTERNAL_STORAGE
   },MEDIA_READ_REQUEST_CODE);
}

  • Android 13除了对媒体文件访问权限进行之外,还为用户提供了一种全新的媒体文件选择器,让其无需向应用授予对整个媒体库的访问权限,也解决了以往的版本不支持多选的问题。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
    // 打开Android 13自带的媒体文件选择器(默认单选)
    Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
    // 如果想多选,就加上这行代码,其中MediaStore.getPickImagesMaxLimit()代表设备的Provider最大支持的多选数量
    intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, Math.min(10,MediaStore.getPickImagesMaxLimit()));
    // 如果只能选择视频,加上这行代码
    intent.setType("video/*");
    // 如果想只选择图片,加上这行代码
    intent.setType("image/*");
    // 如果想限定某种格式的图片或视频,可以把上边的*改成gif或者mp4
    intent.setType("image/gif");
    startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE);
}

  • 需要注意的是,这个Android 13自带的媒体文件选择器,在单选的模式下是弹出半屏高的BottomSheetDialog,此外不能将RecyclerView的第一个item设置为打开Camera(类似微信朋友圈的媒体文件选择器的功能),还不能自定义UI Theme(老板:做得像iOS一样),最重要的是在内置的媒体文件选择器还不支持多选的时代,每个Android程序员都知道怎么利用Content Provider和RecyclerView实现图片多选功能,所以笔者个人还是不建议使用这个官方内置的工具。

你可能感兴趣的:(android)