为ACTION_SEND文本明智地设置默认应用程序(通过选择器,首选项等)

时间:2012-03-15 11:53:33

标签: android android-intent

我的应用程序将(可选)在执行操作时发送社交媒体更新。

我想通过使用用户安装的社交媒体应用来实现这一目标。我不想将用户限制在任何特定的应用程序集中,因此任何可以响应ACTION_SEND类型为text/plain的意图的内容都可以。

但是,我不希望用户每次都必须选择 - 通常,他们每次都使用相同的应用程序,即一旦他们选择了TweetCaster / Facebook /其他,他们会坚持下去。

如果我只是startActivity()ACTION_SENDtext/plain,我会使用""选择,并且还有一个"默认使用此操作"复选框。

但是,这将为所有应用程序设置该意图的默认值,并且似乎(a)可能有人可能已经默认使用非社交媒体应用程序发送文本,并且(b)即使他们没有,似乎有点"粗鲁"默认这样的通用意图,如在某处发送一些文本。

人们通常在这做什么?我得到了一个允许选择特定应用程序的ListPreference的中途(所以我可以在我的应用程序而不是系统范围内的应用程序中启动它的意图),但它似乎很多代码都是如此简单。

我错过了一些更明显的东西吗?有没有办法启动选择器,以便"默认使用此操作"只会用作我的应用ACTION_SENDing text / plain的默认操作?

2 个答案:

答案 0 :(得分:1)

如果您在没有目标的情况下触发ACTION_SEND之类的意图,那么您无法确定应用程序处理该事件的方式。 Android将在未来更好地处理这一问题。

实现此类功能的最佳方式是使用ActionBar share button。一旦您使用了该操作,他们就会坚持使用最后一个选定的应用程序,您只需再次按下它即可分享新内容。

如果你不想通过ActionBar这样做,那么你将不得不做你开始的事情 - 得到一个可以处理ACTION_SEND的所有应用程序的列表,并使用该应用程序作为你的意图目标。< / p>

  

我错过了一些更明显的东西吗?有没有办法启动选择器,以便“默认情况下使用此操作”将仅用作我的应用程序ACTION_SENDing text / plain的默认操作?

该选择器是系统弹出窗口,您无法访问或触发它。通过应用程序代码无法设置首选活动,因为您需要使用例如this

编辑:与我的观点相反,您可以通过Intent.createChooser(Intent target, CharSequence title)

触发它

答案 1 :(得分:1)

  

是否有办法启动选择器,以便“默认使用此操作”将仅用作我的应用ACTION_SENDing text / plain的默认操作?

不,抱歉。这就是为什么大多数ACTION_SEND示例都显示使用Intent.createChooser(),以消除“将其设为默认值”复选框并忽略用户可能设置的任何系统范围默认值的原因之一。

您可以使用自己的“默认”逻辑创建自己的选择器ListPreference(或以对话框为主题的AlertDialog),而不是转到Activity路线。 “默认”可能是:

  • 一个特定的选择,沿着系统范围的“使其成为默认值”
  • 基于行为(例如,将您的列表划分为“常用”和“其他”选项)
  • 基于其他内容(所有用户的聚合行为,月亮阶段等)

创造一个具有这种功能的“超级选择器”是我的中等级别的痒,如果没有人打败我,我今年有可能会刮伤它。