Android - 使用动态文本字段使用选择器对话框进行共享

时间:2015-10-14 17:04:33

标签: android twitter share android-sharing socialshare

如果用户选择Twitter,我想发送缩写文本字段(由于字符限制)。从这个SO帖子 - Branching the Android Share Intent extras depending on which method they choose to share - 我了解到我可以实现目标意图。但是,当我使用下面的代码时,许多应用程序显示为“Android系统”,而Twitter未显示在对话框中。我甚至删除了试图抓住Twitter的if块,但它仍然没有出现。

    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");

    PackageManager pm = rootView.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
    for(final ResolveInfo app : activityList){

        String packageName = app.activityInfo.packageName;
        Intent targetedShareIntent = new Intent(Intent.ACTION_SEND);
        targetedShareIntent.setType("text/plain");

        if(TextUtils.equals(packageName, TWITTER_PACKAGE_NAME)){
            targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
        } else {
            targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
            targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
        }

        targetedShareIntent.setPackage(packageName);
        targetedShareIntents.add(targetedShareIntent);

    }

    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size() - 1), "Share this story");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
    startActivity(chooserIntent);  

我不确定以下内容会发生什么:

Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size() - 1), "Share this story");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));

在SO帖子中,虽然targetedShareIntents.remove(0)被提议为更可重用的解决方案,但仍使用了targetedShareIntents.remove(targetedShareIntents.size() - 1)。非常感谢任何帮助或解释。

1 个答案:

答案 0 :(得分:0)

我认为TextUtils.equals(packageName, TWITTER_PACKAGE_NAME)无法找到确切的com.twitter.android包名称,因此您需要尝试以下代码来匹配 Twitter 包名称

if(packageName.toLowerCase().startsWith("com.twitter")){
        targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
    } else {
        targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
        targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
    }