Get Chosen App from Intent.createChooser

dsg picture dsg · Jul 3, 2014 · Viewed 8.3k times · Source

I am trying to capture the result of Intent.createChooser to know which app a user selected for sharing.

I know there have been a lot of posts related to this:

but these posts are somewhat old, and I am hoping that there might be some new developments.

I am trying to implement a share action without having it be present in the menu. The closest solution to what I want is provided by ClickClickClack who suggest implementing a custom app chooser, but that seems heavy handed. Plus, it seems like there might be some Android hooks to get the chosen app, like the ActivityChooserModel.OnChooseActivityListener.

I have the following code in my MainActivity, but the onShareTargetSelected method is never getting called.

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, shareMessage());
    sendIntent.setType("text/plain");

    Intent intent = Intent.createChooser(sendIntent, getResources().getText(R.string.share_prompt));

    ShareActionProvider sap = new ShareActionProvider(this);
    sap.setShareIntent(sendIntent);
    sap.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() {
        @Override
        public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
            System.out.println("Success!!");
            return false;
        }
    });

    startActivityForResult(intent, 1);

Answer

Jade picture Jade · Jan 15, 2016

As of API level 22 it is now actually possible. In Android 5.1 a method (createChooser (Intent target, CharSequence title, IntentSender sender)) was added that allows for receiving the results of the user's choice. When you provide an IntentSender to createChooser, the sender will be notified by the chooser dialog with the ComponentName chosen by the user. It will be supplied in the extra named EXTRA_CHOSEN_COMPONENT int the IntentSender that is notified.