Hier geht Ihre Lösung. Wenn Sie Ihre eigene App ausschließen möchten, können Sie „packageNameToExclude“ mit ctx.getPackageName ändern()
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;
}
Dieses etwas, dass baute ich meine gefiltert zurück zuführen kann in, um den Freigabedialog zu erstellen, oder muss ich über die Liste einen eigenen Dialog erstellen? Wenn es das Letztere ist, wie erhalten Sie die Symbole der App, um in einem Dialog zu erscheinen? Vielen Dank. –
cottonBallPaws
@littleFluffyKitty: Sie würden Ihren eigenen Dialog verwenden (z. B. 'AlertDialog.Builder' und' setAdapter() '). 'PackageManager' kann Ihnen die Symbole geben. Siehe http://github.com/commonsguy/cw-advandroid/tree/master/Introspection/Launchalot/ – CommonsWare
danke das ist wirklich hilfreich. Haben Sie Vorschläge, welche die beste Möglichkeit ist, die von queryIntentActivities() zurückgegebene Liste mit meiner App zu vergleichen/filtern? Ich dachte daran, den Paketnamen zu verwenden, aber gibt es einen besseren Vergleich? – cottonBallPaws