2013-03-02 34 views
1

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

这是问题所在。输出jpegs需要后台进程来转换图像。我不能简单地在每次用户添加选择时进行转换,因为它会让应用程序陷入困境,并且他们可能不想在最后分享。据我所见,一旦动作被点击,就无法拦截ShareProvider。在这一点上,它似乎必须填充任何必要的URI。

有没有人拿出处理必要的背景处理的方式执行ShareActionProvider过吗?

我已经用尽很多想法:

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

在这一点上我相当肯定我需要实现与A股选配一个经典动作的项目,但我想看看是否有人想出了一个巧妙的解决了这一点。多谢你们!

回答

2

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

使用任何后台进程似乎是不必要的这种解决方案。

+0

哈哈,好主意。我会在几天内尝试,并更新我的结果。如果它的工作将会好得多。 – Anthony 2013-05-31 09:08:51

+0

花了我一段时间来找点时间。你知道搁置一个功能性的黑客有多容易。经过相当多的定制后,我得到了ContentProvider的工作,这是一个非常优越的解决方案。 – Anthony 2013-09-19 09:48:50

0

我重新审视这个问题,并实现ContentProvider的回答以上。这是迄今为止最优秀的解决方案。

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

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

由于我使用ActionBarSherlock我能够修改ActivityChooserModel以存储历史数据,而不管意图是否使用onShareTargetSelected中的自定义代码处理。

最后我补充说,如果管理份额的意图正在等待询问用户是否要等待它改变之前的活动完成,或取消了几个布尔检查。

我不完全知道我所做的是犹太然而,它是相当复杂的,所以我不希望发布的代码,但随时与我联系获取更多信息。