1

我有一个图库应用程序,它可以处理比 Android 更多的图像格式。我想添加一个共享选项,允许用户将任何选定的图像共享为 jpeg。我更喜欢使用 ShareActionProvider,因为它与 UI 很好地集成在一起。

这就是问题所在。要输出 jpeg,需要一个可以转换图像的后台进程。每次用户添加选择时,我都不能简单地转换,因为它会使应用程序陷入困境,他们最终可能不想分享。据我所知,一旦单击操作,就无法拦截 ShareProvider 。此时,它似乎必须填充任何必要的 URI。

有没有人想出在 ShareActionProvider 执行之前处理必要的后台处理的方法?

我已经用尽了很多想法:

  1. onShareTargetSelected(ShareActionProvider, Intent),但这不允许对意图进行任何修改,甚至是 URI 包。
  2. 触发 AsyncTask 然后是共享意图的自定义 Intent,但无法访问用户选择的处理程序。

在这一点上,我相当肯定我需要使用共享选择器实现一个经典的操作项,但我想看看是否有人提出了一个聪明的解决方案。多谢你们!

4

2 回答 2

2

您提供给 ShareActionProvider 的 URI 也可以引用自定义 ContentProvider。您只需将所有转换参数编码到 URI 中并覆盖 ContentProvider 中的 openFile() 方法。通过这种方式,您可以推迟转换,直到用户实际分享。

此解决方案似乎不需要使用任何后台进程。

于 2013-05-24T23:16:39.833 回答
0

我重新审视了这个问题并实现了上面的 ContentProvider 答案。到目前为止,这是一个优越的解决方案。

我想出了一个相当有趣的解决方案。我使用onShareTargetSelected并返回 true 表示我正在处理意图。

这引起了一个小问题,因为ShareActionProvider如果您处理意图,则不会存储历史数据(将最喜欢的应用程序放在列表顶部)。

由于我正在使用ActionBarSherlock,我能够修改ActivityChooserModel以存储历史数据,无论意图是否使用onShareTargetSelected.

最后,我添加了几个布尔检查,用于管理共享意图是否处于挂起状态,以询问用户是否希望在更改活动之前等待它完成,或者取消它。

我不完全确定我所做的是否符合犹太教规,而且它非常复杂,所以我不想发布代码,但请随时与我联系以获取更多信息。

于 2013-03-05T15:51:23.100 回答