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_SENDstartActivityForResult 总是返回 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的主要内容,如果未能解决你的问题,请参考以下文章

iphone4的总容量是啥意思?

按人计算总花费时间和总成本

计算总销量和总销售额

一个类中计算了总页数,怎么在js中调用总页数

如何获取jasperReport报表总页数

如果代币的总余额超过了代币的总供应量,会发生啥?