2016-06-23 11 views
2

я использую RxImagePicker снимать фотографии в моем портретном только-форсированном приложении: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 никогда не вызывается. Это не моя работа или фрагмент, которые перезапускаются, так как все состояние сохраняется в моем приложении.

Что я делаю неправильно?

+0

В отличие от 'runonUithread' вместо' watchon (AndroidSchedulers.mainThread() ', похоже, что вы ничего не делаете неправильно. RxImagePicker не может выдержать уничтожение и воссоздание активности хоста (что происходит на вращение). – JohnWowUs

ответ

0

Это оказалось чем-то необычным.

Я просто забыл обновить до последней версии и использовал несколько месяцев назад библиотеку, в которой исправлено возникновение проблемы, с которой я столкнулся.

Я обновил до последней версии, и проблема исчезла.

1

В соответствии с источниками, RxImagePicker использует PublishSubject, чтобы сообщать клиенту uri. Picker начинает скрытую активность, и эта активность вызывает onCompleted() в ее onDestroy() callback. Этот обратный вызов называется активным отдыхом в ответ на изменение ориентации. Поскольку Subject - Observable, он подчиняется Observablecontract, в котором говорится, что после onCompleted() не должно быть никаких уведомлений, поэтому onNext() Уведомления, следующие onCompleted(), игнорируются. Существует еще одна проблема: onCompleted() вызывается дважды, когда изображение успешно выбрано. Похоже, что нет обходного пути, возможных решений:

  • Вилка библиотеки и исправить вышеупомянутые проблемы на своем собственный вопрос

  • файла на GitHub так автор может обратиться к ним

  • Ролла собственному решения (лучший ИМО)