StartActivityForResults 总是为 Intent.ACTION_SEND 返回 RESULT_CANCELLED
Posted
技术标签:
【中文标题】StartActivityForResults 总是为 Intent.ACTION_SEND 返回 RESULT_CANCELLED【英文标题】:StartActivityForResults always returns RESULT_CANCELLED for Intent.ACTION_SEND 【发布时间】:2013-05-13 09:17:49 【问题描述】:分享弹窗出现时,我在WhatsApp上成功分享了内容,但仍然返回RESULT_CANCELLED。当我使用 Gmail 发送电子邮件时,结果相同。
调用共享意图,ACTION_SEND
和 startActivityForResult
总是返回 CANCELLED
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_TITLE, "Taxeeta, Cab Around The Curb");
sharingIntent
.putExtra(
android.content.Intent.EXTRA_TEXT,
"Hiring a cab no longer needs you to wait on call centers, or pay a"
+ " convenience (yeah right!!) charge. Taxeeta connects you"
+ " to drivers directly, for a quick book experience. With Taxeeta"
+ " you can take matters in your own hands (literally). To download"
+ " the app for your phone visit http://www.taxeeta.com");
startActivityForResult(Intent.createChooser(sharingIntent, "Share and earn a extra Priviledge"), 111);
ActivityForResult 代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == 111)
if (resultCode == RESULT_OK)
Toast.makeText(this, "Ok DUDE", Toast.LENGTH_LONG).show();
else if (resultCode == RESULT_CANCELED)
Toast.makeText(this, "Oversmart Eh!!", Toast.LENGTH_LONG).show();
【问题讨论】:
【参考方案1】:startActivityForResult()
仅适用于打算以这种方式调用的活动。如果您调用的活动没有显式返回结果,您将获得默认结果 RESULT_CANCELED。显然ACTION_SEND
不是设计成这样调用的。 documentation 为ACTION_SEND
表示不生成输出(即:不生成结果)。
查看documentation 获取Activity.startActivityForResult()
:
请注意,此方法只能与以下 Intent 协议一起使用 被定义为返回结果。在其他协议中(例如 ACTION_MAIN 或 ACTION_VIEW),当你 预计。例如,如果您正在启动的活动使用 singleTask 启动模式,它不会在您的任务中运行,因此您将 立即收到取消结果。
【讨论】:
有解决办法吗?如果我想以某种方式分享一张图片并能够判断它是否成功,我该怎么做? @JHowzer 不是我所知道的。无论如何,您如何定义“成功”?这需要您的应用和共享应用之间的合作,而这没有标准。【参考方案2】:我有同样的问题,我认为结果将始终“取消”,因为即使发送了电子邮件或没有发送活动,活动也会被终止。
【讨论】:
我也明白了,但我认为问题在于电子邮件应用程序(Gmail)需要提供结果,然后需要将其转发给选择器,然后选择器需要将其传递给您的应用程序.我认为 Google 没有考虑传递价值。以上是关于StartActivityForResults 总是为 Intent.ACTION_SEND 返回 RESULT_CANCELLED的主要内容,如果未能解决你的问题,请参考以下文章