該應用程序有一個意圖過濾器,允許它通過ACTION_SEND意圖出現在其他應用程序的共享菜單中。應用程序本身也有一個使用ACTION_SEND和createChooser()的共享菜單,我的應用程序出現在列表中。由於他們已經在我的應用程序中,讓他們能夠分享回自己似乎很奇怪。如何從共享菜單中排除您自己的應用程序?
如果從應用程序調用應用程序,我的應用程序是否不會出現在列表中?
該應用程序有一個意圖過濾器,允許它通過ACTION_SEND意圖出現在其他應用程序的共享菜單中。應用程序本身也有一個使用ACTION_SEND和createChooser()的共享菜單,我的應用程序出現在列表中。由於他們已經在我的應用程序中,讓他們能夠分享回自己似乎很奇怪。如何從共享菜單中排除您自己的應用程序?
如果從應用程序調用應用程序,我的應用程序是否不會出現在列表中?
如果從應用程序調用應用程序時,我的應用程序是否出現在列表中?
不通過createChooser()
。不過,您可以通過PackageManager
和queryIntentActivities()
創建自己的類似選擇器的對話框,然後將自己過濾出來。
這裏有你的解決方案。如果你想排除自己的應用程序,你可以改變「packageNameToExclude」與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;
}
這是爲我工作..只是我有一個關於這個targetedShareIntents.remove(0)的問題......你爲什麼這樣做? – 2014-10-20 22:32:02
因爲您需要給Chooser創建者方法一個意圖,然後將其餘意圖添加爲額外的 – Addev 2014-10-23 07:53:41
不起作用。它顯示出奇怪的共享目標,並且多個應用程序不會出現在列表中。 – 2014-11-16 14:17:22
您應該使用
Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share");
這有什麼內置的,我可以養活我的過濾列表回進入,創建共享對話框,還是必須使用列表創建自己的對話框?如果是後者,你如何讓應用程序的圖標出現在對話框中?謝謝。 –
cottonBallPaws
2010-10-31 21:30:09
@littleFluffyKitty:你會使用你自己的對話框(例如'AlertDialog.Builder'和'setAdapter()')。 'PackageManager'可以給你圖標。見http://github.com/commonsguy/cw-advandroid/tree/master/Introspection/Launchalot/ – CommonsWare 2010-11-01 07:04:04
謝謝,這真的很有幫助。你有什麼建議,這是比較/過濾從我的應用程序queryIntentActivities()返回的列表的最佳方式?我正在考慮使用軟件包名稱,但有沒有更好的比較? – cottonBallPaws 2010-11-01 20:37:18