Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单独拍照 - 拍视频模式 - 需要优化 #2631

Closed
tianma8023 opened this issue Mar 22, 2023 · 1 comment
Closed

单独拍照 - 拍视频模式 - 需要优化 #2631

tianma8023 opened this issue Mar 22, 2023 · 1 comment

Comments

@tianma8023
Copy link

Current use version?

当前使用的版本是多少?

v3.10.8

Will this problem occur in demo?

Demo能否复现这问题?

Describe the problem or provide an error log?

描述问题或提供错误log?

单独拍照 - 拍照片模式下,行为正常,示例代码如下:

PictureSelector.create(this)
     .openCamera(SelectMimeType.ofImage())
     // 塞入之前已选择好的图片数据(数据非空)
     .setSelectedData(selectedData)
     .forResult(new OnResultCallbackListener<LocalMedia>() {
        @Override
        public void onResult(ArrayList<LocalMedia> result) {
              // 这里行为正常
              // 这里的 result 会包含之前已经选择好的图片数据 selectedData;
        }

        @Override
        public void onCancel() {

        }
});

单独拍照 - 拍视频模式下,行为异常,示例代码如下:

PictureSelector.create(this)
     .openCamera(SelectMimeType.ofVideo())
     // 塞入之前已选择好的视频数据(数据非空)
     .setSelectedData(selectedData)
     .forResult(new OnResultCallbackListener<LocalMedia>() {
        @Override
        public void onResult(ArrayList<LocalMedia> result) {
              // **不会回调到这里,会提示 “你最多只能选择1个视频”**
        }

        @Override
        public void onCancel() {

        }
});

通过上面两个例子,可以看出 单独拍照,无论是单独拍视频,还是单独拍照片,API 调用都是一样的(区别在于参数不一样),在这种情况下,回调的逻辑也应该保持一致。否则调用方针对这里需要有不同的处理方式。实际上目前针对这里的行为逻辑是:同样的API调用方式,拍照片可以塞入已选择的数据,但拍视频不行,需要单独处理和适配

临时的解决方案就是,单独拍视频的时候,不调用 .setSelectedData(),而是在 onResult 回调的时候,将回调回来的数据添加到已选择的数据中: selectedData.addAll(result);

Demo 的复现路径:

  • 取消勾选 "相册or单独拍照" 进入 单独拍照模式
  • 最大视频数调为 2及以上
  • 点击 + 图标,选择 “录视频”,进行录制后确认。第二次录制后确认,就会提示 “你最多只能选择1个视频”
@tianma8023
Copy link
Author

刚刚看了一下这块的源码逻辑,发现本质原因在于:单独拍照模式,实际上是默认有容量限制的,单独拍照片模式容量是 9,单独拍视频容量是 1。上述示例冲突的点在于 PictureSelectionCameraModel 可以调用 #setSelectedData 方法设置已选择的数据,但是没有暴露设置最大容量的API,导致默认的容量会跟传入的 selectedData 大小冲突。

这里个人认为API设计方案有以下几种:

  1. 取消 PictureSelectionCameraModel#setSelectedData 方法,这样回调的结果一定只有一条数据,在回调时将 result 添加到 selectedData 中
  2. PictureSelectionCameraModel 新增 setMaxSelectNum 方法,让调用方可控制容量
  3. PictureSelectionCameraModel 取消容量判断逻辑,即不再有容量概念。因为单独拍照模式下,一定是最多只会产生一条数据,由调用方自行解决可能存在的容量问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants