Android Google Play 照片选择器(Photo Picker)

106 篇文章 0 订阅
41 篇文章 1 订阅
Android 13引入了新的照片选择器工具,提供安全的媒体文件选择方式,避免应用获取完整媒体库权限。用户可在按日期排序的界面中选择照片或视频。应用可通过设置ACTION_PICK_IMAGES intent的额外参数定义选择限制。照片选择器支持单选和多选模式,返回URI集合供应用处理。应用不能持久访问返回的URI。
摘要由CSDN通过智能技术生成

作者:无敌何尝不可

照片选择器

Android 13 包含对新照片选择器工具的支持。此工具为用户提供了一种安全的内置媒体文件选择方式,让其无需向应用授予对整个媒体库的访问权限。

注意:即将发布的 Google Play 系统更新预计会包含与照片选择器有关的新功能。在一项此类更新中,该库将增加对以 Android 11(API 级别 30)或更高版本为目标平台的应用(不包括 Android Go 设备)的支持。

特别注意:对于国内手机而言,没有Google Play系统更新是不是就不能使用这个功能?待验证。

图 1. 照片选择器提供了一个直观的界面,便于与您的应用分享照片。

选择媒体

照片选择器提供了一个可浏览、可搜索的界面,其中按日期(从最近到最早)顺序向用户呈现其媒体库中的文件。您可以指定用户只能看到照片或只能看到视频,并且默认情况下,允许的媒体选择量上限设置为 1。

定义分享限制

应用可以声明 android.provider.extra.PICK_IMAGES_MAX 的值,该值表示在向用户显示时照片选择器中显示的媒体文件数量上限。例如,如果您提示用户为其帐号选择要求的个人资料照片,请将一张照片设置为分享要求上限。

注意:如果您选择的上限为 1 张,照片选择器会以半屏模式打开。

如需在单选模式下启动照片选择器,请执行以下操作:

// Launches photo picker in single-select mode.
// This means that the user can select one photo or video.
val intent = Intent(MediaStore.ACTION_PICK_IMAGES)
startActivityForResult(intent, PHOTO_PICKER_REQUEST_CODE)

选择多张照片或多个视频

如果应用的用例需要用户选择多张照片或多个视频,您可以使用 EXTRA_PICK_IMAGES_MAX extra 指定照片选择器中应显示照片的数量上限,如以下代码段中所示:

// Launches photo picker in multi-select mode.
// This means that user can select multiple photos/videos, up to the limit
// specified by the app in the extra (10 in this example).
val maxNumPhotosAndVideos = 10
val intent = Intent(MediaStore.ACTION_PICK_IMAGES)
intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos)
startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE)

请注意,可指定为文件数量上限的最大数字存在平台限制。如需访问此限制,请调用 MediaStore#getPickImagesMaxLimit()

处理照片选择器结果

照片选择器启动后,使用新的 ACTION_PICK_IMAGES intent 来处理结果。该选择器会返回一组 URI:

// Photo Pick会回调onActivityResult() .
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode != Activity.RESULT_OK) {
        // 处理错误
        return
    }
    when (requestCode) {
            REQUEST_PHOTO_PICKER_SINGLE_SELECT -> {
            //单选模式得到图片.
            val currentUri: Uri = data.data

            // 在这里处理photo/video URI。返回的应该是provider的路径,需要转成file
            return
        }
                REQUEST_PHOTO_PICKER_MULTI_SELECT -> {
            // 多选模式得到图片.
            var i = 0
            data.clipData!!.itemCount
            for(i until data.clipData!!.itemCount){
                var uri:Uri=data.clipData!!.getItemAt(i).uri;
               // 在这里处理每一个photo/video URI。返回的应该是provider的路径,需要转成file
            }
            return;
        }

默认情况下,照片选择器会既显示照片又显示视频。您还可以在 setType() 方法中设置 MIME 类型,以便按“仅显示照片”或“仅显示视频”进行过滤。例如,如需在照片选择器中仅显示视频,请将 video/* 传入 setType()

// 启动单选videos模式的photo picker.
val intent = Intent(MediaStore.ACTION_PICK_IMAGES)
intent.type = "video/*"
startActivityForResult(intent, PHOTO_PICKER_VIDEO_SINGLE_SELECT_REQUEST_CODE)

//应用可以通过改变mimeType来让用户控制选择模式
// images only - intent.type = "images/*"

注意:您的应用不能持续访问从此 intent 返回的 URI。当应用的进程结束后,该应用将无法访问 URI。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值