美文网首页Android技术知识
Android Google Play 照片选择器(Photo

Android Google Play 照片选择器(Photo

作者: 搬砖小老弟 | 来源:发表于2022-04-28 13:59 被阅读0次

    作者:无敌何尝不可
    转载地址:https://juejin.cn/post/7091483880342945829

    照片选择器

    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。

    相关文章

      网友评论

        本文标题:Android Google Play 照片选择器(Photo

        本文链接:https://www.haomeiwen.com/subject/uxcdyrtx.html