如果拍摄图像时方向发生变化,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 重新创建时被调用以响应方向变化。因为 Subject
是 Observable
,它服从 Observable
contract,这说明 onCompleted()
之后不应有进一步的通知,因此 onNext()
通知如下onCompleted()
被忽略。还有一个问题:onCompleted()
在成功拾取图像时被调用了两次。似乎没有解决方法,可能的解决方案:
分支库并自行修复上述问题
github 上的文件问题,以便作者可以解决它们
推出您自己的解决方案(最佳 IMO)
原来不是什么特别的东西。
我只是忘了更新到最新版本,使用的是几个月前的库版本,它修复了我面临的问题。
我已经更新到最新版本,问题消失了。
我正在使用 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 重新创建时被调用以响应方向变化。因为 Subject
是 Observable
,它服从 Observable
contract,这说明 onCompleted()
之后不应有进一步的通知,因此 onNext()
通知如下onCompleted()
被忽略。还有一个问题:onCompleted()
在成功拾取图像时被调用了两次。似乎没有解决方法,可能的解决方案:
分支库并自行修复上述问题
github 上的文件问题,以便作者可以解决它们
推出您自己的解决方案(最佳 IMO)
原来不是什么特别的东西。
我只是忘了更新到最新版本,使用的是几个月前的库版本,它修复了我面临的问题。
我已经更新到最新版本,问题消失了。