OK, now that we've established that I have zero choice but to construct my own chooser Intent, what have I missed in the code below? NB this seems so fragile. I feel like I'm having to make too many assumptions how how the Android framework works.
/** > * Creates a Chooser Intent containing all available options including > the additional one. > * > * @param context > * @param intent Intent describing what to share. > * @param chooserTitle Title to display on chooser dialog. > * @param extraIntentTarget Class of the Activity to add as an > additional share target. > * @return Chooser Intent outlining all share options. > */ > public static Intent createChooser(Context context, Intent intent, > CharSequence chooserTitle, Class extraIntentTarget) { > // Using a SortedMap to sort the output by name. > final Comparator displayComparator = new > PackageItemInfo.DisplayNameComparator(context.getPackageManager()); > final SortedMap<PackageItemInfo, Intent> targetedIntents = new > TreeMap<PackageItemInfo, Intent>(displayComparator); > // > final List<ResolveInfo> resInfo = > context.getPackageManager().queryIntentActivities(intent, 0); > for (ResolveInfo resolveInfo : resInfo) { > final String packageName = > resolveInfo.activityInfo.packageName; > if (!resolveInfo.activityInfo.enabled) { > continue; // Don't include disabled Activities. > } > if (!resolveInfo.activityInfo.exported && > !context.getPackageName().equals(packageName)) { > // Don't include non-exported Activities from another > package > // This is a work around to > http://code.google.com/p/android/issues/detail?id=29535 > continue; > } > // > final Intent targetedIntent = new Intent(intent); > targetedIntent.setPackage(packageName); > targetedIntents.put(resolveInfo.activityInfo, targetedIntent); > // > if (AppConstants.DEV_LOGGING) Log.v(TAG, "#getChooserIntent > intent=" + targetedIntent); > } > // > // Now add in the extra target for the intent > final ActivityInfo activityInfo = getActivityInfo(context, > extraIntentTarget); > final Intent extraTargetedIntent = new Intent(intent); > extraTargetedIntent.setClass(context, extraIntentTarget); > targetedIntents.put(activityInfo, extraTargetedIntent); > if (AppConstants.DEV_LOGGING) Log.v(TAG, "#getChooserIntent > extraIntent=" + extraTargetedIntent); > // > // Get the Intents so we can split off the first (initialising) > Intent from the others. > final List<Intent> orderedIntents = new ArrayList<Intent>(); > orderedIntents.addAll(targetedIntents.values()); > // > final Intent inialisingIntent = > orderedIntents.remove(targetedIntents.size() - 1); > final Intent chooserIntent = > Intent.createChooser(inialisingIntent, chooserTitle); > chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, > orderedIntents.toArray(new Parcelable[]{})); > return chooserIntent; > } -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en