我正在尝试捕获Intent.createChooser
的结果,以了解用户选择共享的应用。
我知道有很多与此相关的帖子:
但是这些帖子有些陈旧,我希望可能会有一些新的发展。
我正在尝试实现share action,而不会出现在菜单中。我想要的最接近的解决方案由ClickClickClack提供,他建议实施自定义应用选择器,但这似乎很重要。此外,似乎可能会有一些Android挂钩来获取所选的应用,例如ActivityChooserModel.OnChooseActivityListener。
我的MainActivity中有以下代码,但onShareTargetSelected
方法永远不会被调用。
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, shareMessage());
sendIntent.setType("text/plain");
Intent intent = Intent.createChooser(sendIntent, getResources().getText(R.string.share_prompt));
ShareActionProvider sap = new ShareActionProvider(this);
sap.setShareIntent(sendIntent);
sap.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() {
@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
System.out.println("Success!!");
return false;
}
});
startActivityForResult(intent, 1);
答案 0 :(得分:14)
从API级别22开始,现在实际上是可行的。在Android 5.1中,添加了一种方法(createChooser (Intent target, CharSequence title, IntentSender sender)
),允许接收用户选择的结果。当您向IntentSender
提供createChooser
时,选择者对话框会通过用户选择的ComponentName
通知发件人。它将在EXTRA_CHOSEN_COMPONENT
IntentSender
的额外名为notified的字段中提供。
答案 1 :(得分:2)
我正在尝试捕获Intent.createChooser的结果,以了解用户选择共享的应用程序。
这是不可能的。
其他“选择”解决方案,如ShareActionProvider
,可能会提供更多。我没有检查Intent
递交给onShareTargetSelected()
以查看它是否包含所选目标的ComponentName
,尽管文档表明它应该。
并且,如果由于某种原因它没有,欢迎您尝试分叉ShareActionProvider
来添加您想要的钩子。
createChooser()
无法以这种方式处理的原因仅仅是因为“选择”是通过与您分开的流程完成的。
我的MainActivity中有以下代码,但onShareTargetSelected方法永远不会被调用。
ShareActionProvider
进入操作栏。你不能只创建一个实例,调用几个setter,并期望发生一些事情。