Android成功的共享意图

43

如何判断用户是否成功完成了分享意图?例如,如果用户想通过Facebook或Twitter分享应用程序。

编辑:

我不是在研究如何创建共享Intent。我想知道用户是否实际上分享了任何东西。还是用户按了取消按钮。


1
你的应用程序为什么需要知道这个? - adamp
1
我想感谢用户分享我的应用程序。但是如果他们没有分享,我就不想感谢他们。 - Steve D
1
@adamp 这些信息可能对统计分析很重要。了解你的内容在哪里被分享得最多,可以优化针对这个目标的策略。 - dy_
4个回答

25

我认为没有一种保证可行的方法。

您可以使用startActivityForResult()来启动发送操作,并希望处理Intent的活动会使用RESULT_OK回复。但是您不能总是依赖它能够正常工作。


我想我可以为可能使用的每个应用程序记录回复并从那里使用 switch("reply for each app")。 - Steve D
嗨,我遇到了同样的问题。如果你成功了,能否请分享一下你的结果。谢谢 :) - yakusha
12
大多数分享服务的响应都是0,这与分享被取消没有什么区别(也是0)。Twitter 返回-1,但只是如此。看起来我们无法跟踪分享 :( - Kevin_TA
我测试了WhatsApp、Signal、Twitter和Gmail,只有WhatsApp返回了RESULT_OK。其他所有应用都返回了RESULT_CANCELED。 - G00fY

3

找到了适用于Android >= 22的选项,希望能对某些人有所帮助。

从Android 22开始,createChooser方法中有一个选项可以发送IntentSender对象。您可以为广播接收器创建一个挂起的意图,在其中可以获取用户单击的应用程序的包名称。

接收器:

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    // do something here
}
}

清单:

<receiver android:name="MyReceiver" android:exported="false"/>

创建待处理意图:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);

然后在选择器意图中使用它:

startActivity(Intent.createChooser(share
                            , "some_title"
                            , pendingIntent.getIntentSender()));

然后在onReceiver中,您可以获取应用程序的包名:

String selectedAppPackage = String.valueOf(intent.getExtras().get(EXTRA_CHOSEN_COMPONENT))

Source: medium blogpost


2
但是这只告诉了选择的应用程序,而没有告知分享是否成功。 - Votagus

2

当用户取消分享时,在OnActivityResult中的Twitter"数据"对象为空。


对我来说,Twitter 总是返回空数据,即使消息已发送。 - David Papirov

-10

9
我不是在寻找如何创建共享意图。我想知道用户是否实际分享了任何内容,还是点击了取消按钮。 - Steve D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接