0

If the user chooses Twitter, I want to send an abbreviated text field (due to character limit). From this SO post -- Branching the Android Share Intent extras depending on which method they choose to share -- I learned that I can implement targeted intents. However, when I use the code below, a number of apps show as "Android System" and Twitter does not show up in the dialog. I even removed the if block trying to catch Twitter, and it still did not appear.

    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);  

I'm not really sure what's going on with the following:

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

In the SO post, targetedShareIntents.remove(0) was used although targetedShareIntents.remove(targetedShareIntents.size() - 1) was proposed as a more reusable solution. Any help or explanations on this is greatly appreciated.

Community
  • 1
  • 1
Sean Thomas
  • 129
  • 12

1 Answers1

0

I think TextUtils.equals(packageName, TWITTER_PACKAGE_NAME) can't find exactly com.twitter.android package name, so you need to try below code for match Twitter package name

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));
    }
pRaNaY
  • 24,642
  • 24
  • 96
  • 146
  • Unfortunately, this is not the problem. It is finding the Twitter package (I set a breakpoint), and I actually tried that code as well. – Sean Thomas Oct 14 '15 at 18:07