如果拍摄图像时方向发生变化,RxImagePicker 不会调用完成

RxImagePicker not calling completion if orientation changes when taking image

我正在使用 RxImagePicker 在我的强制肖像应用程序中拍照:

RxImagePicker.with(getActivity()).requestImage(Sources.CAMERA).subscribe(new Action1<Uri>() {
        @Override
        public void call(Uri uri) {
            RxImageConverters.uriToBitmap(getActivity(), uri).subscribe(new Action1<Bitmap>() {
                @Override
                public void call(final Bitmap bitmap) {
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            //i take over here if we ever get here...
                        }
                    });
                }
            });
        }
    });

如果我在不旋转设备的情况下拍照,它就可以工作(虽然图像旋转了,但这是另一个问题)。但是,如果我横向拍照,则永远不会调用 uriToBitmap 。这不是我的 activity 或片段正在重新启动,因为所有的状态都保留在我的应用程序中。

我做错了什么?

根据消息来源,RxImagePicker 使用 PublishSubject 将 uri 通知传达给客户端。选择器开始隐藏 activity,并且 activity 在它的 onDestroy() 回调中发出 onCompleted()。该回调在 activity 重新创建时被调用以响应方向变化。因为 SubjectObservable,它服从 Observable contract,这说明 onCompleted() 之后不应有进一步的通知,因此 onNext() 通知如下onCompleted() 被忽略。还有一个问题:onCompleted() 在成功拾取图像时被调用了两次。似乎没有解决方法,可能的解决方案:

  • 分支库并自行修复上述问题

  • github 上的文件问题,以便作者可以解决它们

  • 推出您自己的解决方案(最佳 IMO)

原来不是什么特别的东西。

我只是忘了更新到最新版本,使用的是几个月前的库版本,它修复了我面临的问题。

我已经更新到最新版本,问题消失了。