安卓分享意图选择器

15

我正在使用类似这样的方法,在用户手机上使用可用的应用程序来共享一些文本。

public void share(String subject,String text) {
     final Intent intent = new Intent(Intent.ACTION_SEND);

     intent.setType("text/plain");
     intent.putExtra(Intent.EXTRA_SUBJECT, subject);
     intent.putExtra(Intent.EXTRA_TEXT, text);

     startActivity(Intent.createChooser(intent, getString(R.string.share)));
}

我的主要问题是,如果用户选择Twitter而不是电子邮件(例如,短网址的简短版本VS带有附加图像的完整文本),我想要不同的文本。

如何确定用户已决定使用哪个应用程序?


gumbercules在这里给出了一个非常棒的答案:https://dev59.com/J2025IYBdhLWcg3w6KOO - hitch45
3个回答

8
使用createChooser将文本传递给系统后,您无法再更改文本。

那我得自己构建选择器?:-/ 这不是很笨拙的 API 设计吗?如果是这样,有没有关于如何专门为 Twitter 或 Facebook 创建意图的示例代码? - Vincent Mimoun-Prat
2
所涉及的应用程序必须已发布其自己的公共API,以便发送推文、更新状态等。Twitdroid是我所知道的唯一一个这样做的应用程序,其他应用程序没有遵循它的惯例。个人而言,我不介意这种设计,我认为方便性值得这种权衡。 - Nathan Schwermann
确实很方便,但是对于信息长度的限制却不太容易适应。我可能会添加一个对话框,询问用户是否想将内容分享为短文本或长文本。虽然需要点击次数较多,但这是我目前能想到的唯一方法。感谢您的建议。 - Vincent Mimoun-Prat
3
你可以为一个意图指定包名,但我建议不要这样做。相反,制作你自己的选择器并为某些服务(例如Twitter)设置一些特殊情况。更好的做法是制作带有“较短文本”复选框等功能的自定义选择器。 - alexanderblom

0
 Intent intent = new Intent(Intent.ACTION_SEND);

 intent.setType("text/plain");
 intent.putExtra(Intent.EXTRA_SUBJECT, subject);
 intent.putExtra(Intent.EXTRA_TEXT, textWhichYouWantToShare);

 startActivity(Intent.createChooser(intent, getString(R.string.share)));

0

点击社交(如Twitter)

shareOnSocial(activity, h.shareTwitter, Global.TWITTER_ID, shareContent, activity.getResources().getString(R.string.error_twitter));

创建选择器

shareOnSocial(activity, h.shareChooser, "choose", shareContent, activity.getResources().getString(R.string.error));

方法共享

private void shareOnSocial(Activity mAct, View shareView, String packageId, String content, String error) {
    shareView.startAnimation(clickAnimation);
    Intent i = new Intent();
    i.setAction(Intent.ACTION_SEND);
    i.putExtra(Intent.EXTRA_TEXT, content);
    i.setType("text/plain");

    if (!packageId.equals("choose")) {
        i.setPackage(packageId);
        try {
            mAct.startActivity(i);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(mAct, error, Toast.LENGTH_SHORT).show();
        }
    } else {
        mAct.startActivity(Intent.createChooser(i, mAct.getString(R.string.share)));
    }
}

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