Android

图片选择器

更新时间: 2025/10/23 17:26:54

功能描述

图片选择器在即时通信应用中有多种应用场景:

  • 聊天界面:发送图片/视频消息
  • 个人资料:用户头像设置与更换
  • 群组管理:群头像选择与上传
  • 媒体分享:相册内容展示与共享

本文主要介绍如何在您的应用中快速接入图片选择器功能,提供两种图片选择器的接入方案,您可以根据实际需求进行选择:

  • 采用 UIKit 提供的图片选择器功能。
  • 采用自定义的图片选择器。

接入方案

方案一:使用 UIKit 提供的图片选择器

UIKit 自 10.8.9 版本起,提供基于开源插件 PictureSelector 的新图片选择器供用户使用。具备以下功能:

  • 支持选择图片(最多支持 9 张)
  • 支持选择视频(单次仅支持 1 个)

UIKit 使用图片选择器插件,需要进行简单的配置才能使用,接入步骤如下:

  1. 引入 PictureEngine 类。

    将 UIKit Demo 中图片选择器的 PictureEngine 拷贝至您的项目中即可。此类封装了图片选择的核心逻辑:

    Java/** 
     * 图片选择器 Engine,用于选择图片和视频
     * 使用 common-picturechoose 库实现,可以切换您需要的图片选择库 1. 支持选择图片 2. 支持选择视频 
     */
    public class PictureEngine implements IPictureChooseEngine {
      @Override
      public void onStartPictureChoose(
          @NotNull Context context,
          @NotNull ActivityResultLauncher<Intent> activityResultLauncher,
          @NotNull MediaChooseConfig config,
          @NotNull FetchCallback<@NotNull ArrayList<@NotNull LocalFileInfo>> callback) {
    
            // 根据不同的请求处理,callback采用回调的方式将接口回传
              if (callback != null) {
          
            }else if (activityResultLauncher != null) {
                // 采用activityResultLauncher 的方式发起,配合public ArrayList<LocalFileInfo> onIntentResult来处理结果
            }
                
        }
    
    // 采用 activityResultLauncher 的方式发起,通过该方法对返回结果处理
        @Override
      public ArrayList<LocalFileInfo> onIntentResult(@NotNull ActivityResult result) {
        int resultCode = result.getResultCode();
        ArrayList<LocalFileInfo> localFileInfos = new ArrayList<>();
        if (resultCode == RESULT_OK) {
          ArrayList<LocalMedia> selectList = PictureSelector.obtainSelectorList(result.getData());
          for (LocalMedia localMedia : selectList) {
            if (localMedia.getPath() == null) {
              continue;
            }
            localFileInfos.add(convertToLocalFileInfo(localMedia));
          }
        }
        return localFileInfos;
      }
    
  2. 设置图片选择引擎。

    在应用初始化阶段设置图片选择引擎:

    Java// 设置图片选择引擎,可在 Application 的初始化或者您的 MainActivity 的 OnCreate 中调用
    // 只需在首次使用前设置一次即可
    ChatKitClient.setPictureChooseEngine(new PictureEngine());
    

方案二:自定义图片选择器

如果您希望使用自己的图片选择器,可以通过 UIKit 提供的接口实现。

  1. 创建自定义选择器引擎。

    实现 IPictureChooseEngine 接口,处理选择图片/视频的请求和结果。

    • 当用户在 UIKit 中点击发送图片或者群头像更换会触发 onStartPictureChoose 回调。
    • 参数 MediaChooseConfig 为配置信息,包含类型限制和数量限制等信息。(头像选择场景下,限制只能选择图片且数量为 1。)
    • activityResultLauncher 图片选择是通过 lancher 的发起选择。callback 通过回调的方式回传选择结果。
    • LocalFileInfo 为 UIKit 中对媒体文件的统一表示,需要将您的自定义数据转换为此格式。
    javapublic class CustomPictureEngine implements IPictureChooseEngine {
      @Override
      public void onStartPictureChoose(
          @NotNull Context context,
          @NotNull ActivityResultLauncher<Intent> activityResultLauncher,
          @NotNull MediaChooseConfig config,
          @NotNull FetchCallback<@NotNull ArrayList<@NotNull LocalFileInfo>> callback) {
    
          }
    // 采用 activityResultLauncher 的方式发起,通过该方法对返回结果处理
        @Override
      public ArrayList<LocalFileInfo> onIntentResult(@NotNull ActivityResult result) {
    
      }
    
    }
    
  2. 设置自定义选择器。

    java// 设置图片选择引擎,用于选择图片
    // 该代码可以在 Application 的初始化或者您的 MainActivity 的 OnCreate 中均可。只要在使用之前设置即可,不需要重复设置。
    ChatKitClient.setPictureChooseEngine(new CustomPictureEngine());
    
此文档是否对你有帮助?
有帮助
去反馈
  • 功能描述
  • 接入方案
  • 方案一:使用 UIKit 提供的图片选择器
  • 方案二:自定义图片选择器