2013-03-02 2 views
1

У меня есть приложение для галереи, которое обрабатывает больше форматов изображений, чем Android. Я хотел бы добавить опцию share, которая позволит пользователю передавать любые выбранные изображения в формате jpeg. Я бы предпочел использовать ShareActionProvider, так как он прекрасно сочетается с пользовательским интерфейсом.ShareActionProvider с фоновой обработкой

В этом проблема. Для вывода jpegs требуется фоновый процесс, который преобразует изображения. Я не могу просто конвертировать каждый раз, когда пользователь добавляет выбор, поскольку он будет болото приложение, и они могут не захотеть поделиться в конце. Насколько я видел, нет способа перехватить ShareProvider после нажатия на действие. В этот момент кажется, что он должен быть заполнен любыми необходимыми URI.

Кто-нибудь придумал способ обработки необходимой фоновой обработки перед выполнением ShareActionProvider?

Я истощенные много идей:

  1. onShareTargetSelected (ShareActionProvider, Intent), но это не позволяет какой-либо модификации намерения, даже не сверток URI.
  2. пользовательское намерение, которое запускает AsyncTask, а затем намерение общего доступа, но которое не может получить доступ к выбранному пользователем обработчику.

На данный момент я уверен, что мне нужно будет реализовать классический элемент действия с помощью выбора общего ресурса, но я хотел бы посмотреть, есть ли у кого-нибудь разумное решение. Спасибо, парни!

ответ

2

URI, который вы предоставляете ShareActionProvider, может также ссылаться на пользовательский ContentProvider. Вы просто кодируете все параметры преобразования в URI и переопределяете метод openFile() в ContentProvider. Таким образом, вы откладываете конверсию до тех пор, пока пользователь не поделится.

Использование любого фонового процесса кажется ненужным с помощью этого решения.

+0

Ха-ха, отличная идея. Я попробую это через пару дней и обновить результаты. Если это сработает, это будет намного лучше. – Anthony

+0

Пришло время найти время. Вы знаете, как легко отложить функциональный взлом. После довольно небольшой настройки я получил работу ContentProvider, и это было значительно превосходное решение. – Anthony

0

Я пересмотрел эту проблему и внедрил ответ ContentProvider выше. Это, безусловно, превосходное решение.

Я придумал довольно интересное решение. Я использовал onShareTargetSelected и вернул true, чтобы указать, что я обрабатывал намерение.

Это вызвало небольшую проблему, так как ShareActionProvider не будет хранить исторические данные (поместите любимое приложение в верхней части списка), если вы будете обрабатывать намерение.

Поскольку я использую ActionBarSherlock, я смог изменить ActivityChooserModel для хранения исторических данных независимо от того, обрабатывается ли намерение с помощью пользовательского кода в onShareTargetSelected.

Наконец, я добавил пару логических проверок, которые управляют, если намерение общего доступа находится в ожидании запроса пользователя, если они хотят дождаться его завершения, прежде чем изменять действия или отменить его.

Я не совсем уверен, что я сделал это кошерно, но это довольно сложно, поэтому я не хочу публиковать код, но не стесняйтесь обращаться ко мне за дополнительной информацией.