图片选择器
更新时间: 2025/10/23 17:26:54
功能描述
图片选择器在即时通信应用中有多种应用场景:
- 聊天界面:发送图片/视频消息
- 个人资料:用户头像设置与更换
- 群组管理:群头像选择与上传
- 媒体分享:相册内容展示与共享
本文主要介绍如何在您的应用中快速接入图片选择器功能,提供两种图片选择器的接入方案,您可以根据实际需求进行选择:
- 采用 UIKit 提供的图片选择器功能。
- 采用自定义的图片选择器。
接入方案
方案一:使用 UIKit 提供的图片选择器
UIKit 自 10.8.9 版本起,提供基于开源插件 PictureSelector 的新图片选择器供用户使用。具备以下功能:
- 支持选择图片(最多支持 9 张)
- 支持选择视频(单次仅支持 1 个)
UIKit 使用图片选择器插件,需要进行简单的配置才能使用,接入步骤如下:
-
引入
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; }
-
设置图片选择引擎。
在应用初始化阶段设置图片选择引擎:
Java
// 设置图片选择引擎,可在 Application 的初始化或者您的 MainActivity 的 OnCreate 中调用 // 只需在首次使用前设置一次即可 ChatKitClient.setPictureChooseEngine(new PictureEngine());
方案二:自定义图片选择器
如果您希望使用自己的图片选择器,可以通过 UIKit 提供的接口实现。
-
创建自定义选择器引擎。
实现
IPictureChooseEngine
接口,处理选择图片/视频的请求和结果。- 当用户在 UIKit 中点击发送图片或者群头像更换会触发
onStartPictureChoose
回调。 - 参数
MediaChooseConfig
为配置信息,包含类型限制和数量限制等信息。(头像选择场景下,限制只能选择图片且数量为 1。) activityResultLauncher
图片选择是通过lancher
的发起选择。callback
通过回调的方式回传选择结果。LocalFileInfo
为 UIKit 中对媒体文件的统一表示,需要将您的自定义数据转换为此格式。
java
public 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) { } }
- 当用户在 UIKit 中点击发送图片或者群头像更换会触发
-
设置自定义选择器。
java
// 设置图片选择引擎,用于选择图片 // 该代码可以在 Application 的初始化或者您的 MainActivity 的 OnCreate 中均可。只要在使用之前设置即可,不需要重复设置。 ChatKitClient.setPictureChooseEngine(new CustomPictureEngine());
此文档是否对你有帮助?