Voici votre solution. Si vous voulez exclure votre propre application, vous pouvez changer « packageNameToExclude » avec ctx.getPackageName()
public static Intent shareExludingApp(Context ctx, String packageNameToExclude, String imagePath, String text) {
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/*");
List<ResolveInfo> resInfo = ctx.getPackageManager().queryIntentActivities(createShareIntent(text,new File(imagePath)), 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo info : resInfo) {
Intent targetedShare = createShareIntent(text,new File(imagePath));
if (!info.activityInfo.packageName.equalsIgnoreCase(packageNameToExclude)) {
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareIntents.add(targetedShare);
}
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0),
"Select app to share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
targetedShareIntents.toArray(new Parcelable[] {}));
return chooserIntent;
}
return null;
}
private static Intent createShareIntent(String text, File file) {
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/*");
if (text != null) {
share.putExtra(Intent.EXTRA_TEXT, text);
}
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
return share;
}
Ce qu'il ya quelque chose construit que je peux nourrir ma liste filtrée retour dans, pour créer la boîte de dialogue de partage, ou dois-je créer ma propre boîte de dialogue en utilisant la liste? Si c'est la dernière, comment les icônes de l'application apparaissent-elles dans une boîte de dialogue? Merci. –
cottonBallPaws
@littleFluffyKitty: Vous utiliseriez votre propre boîte de dialogue (par exemple, 'AlertDialog.Builder' et' setAdapter() '). 'PackageManager' peut vous donner les icônes. Voir http://github.com/commonsguy/cw-advandroid/tree/master/Introspection/Launchalot/ – CommonsWare
merci c'est vraiment utile. Avez-vous des suggestions qui constituent le meilleur moyen de comparer/filtrer la liste renvoyée par queryIntentActivities() avec mon application? Je pensais utiliser le nom du paquet, mais y a-t-il une meilleure comparaison? – cottonBallPaws