【问题标题】:StartActivityForResults always returns RESULT_CANCELLED for Intent.ACTION_SENDStartActivityForResults 总是为 Intent.ACTION_SEND 返回 RESULT_CANCELLED
【发布时间】: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();
        }
    }
}

【问题讨论】:

    标签: android start-activity


    【解决方案1】:

    startActivityForResult() 仅适用于打算以这种方式调用的活动。如果您调用的活动没有显式返回结果,您将获得默认结果 RESULT_CANCELED。显然ACTION_SEND 不是设计成这样调用的。 documentationACTION_SEND 表示不生成输出(即:不生成结果)。

    查看documentation 获取Activity.startActivityForResult()

    请注意,此方法只能与以下 Intent 协议一起使用 被定义为返回结果。在其他协议中(例如 ACTION_MAIN 或 ACTION_VIEW),当你 预计。例如,如果您正在启动的活动使用 singleTask 启动模式,它不会在您的任务中运行,因此您将 立即收到取消结果。

    【讨论】:

    • 有解决办法吗?如果我想以某种方式分享一张图片并能够判断它是否成功,我该怎么做?
    • @JHowzer 不是我所知道的。无论如何,您如何定义“成功”?这需要您的应用和共享应用之间的合作,而这没有标准。
    【解决方案2】:

    我有同样的问题,我认为结果将始终“取消”,因为即使发送了电子邮件或没有发送活动,活动也会被终止。

    【讨论】:

    • 我也明白了,但我认为问题在于电子邮件应用程序(Gmail)需要提供结果,然后需要将其转发给选择器,然后选择器需要将其传递给您的应用程序.我认为 Google 没有考虑传递价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2013-12-18
    相关资源
    最近更新 更多