我想使用directshare功能,但我需要排除应用。
排除部分工作得很好,我只是给选择器一个意图数组,而意图只包括一个特定的应用程序。
但是执行此directshare不起作用。
只有在向选择者提供一个意图时,Directshare似乎才有效。
是否可以排除应用并使用directshare?
代码段:
与意图列表(How to filter specific apps for ACTION_SEND intent (and set a different text for each app))共享:
final Intent chooserIntent = Intent.createChooser(targetShareIntents.remove(0), "Share with: ");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{}));
activity.startActivity(chooserIntent);
与directshare共享,但不排除:
final Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
activity.startActivity(Intent.createChooser(sendIntent, "Share with:"));
答案 0 :(得分:1)
我遇到了与Direct Share相同的问题,发现它似乎只适用于传递给createChooser()
的目标意图。
我的kludgy解决方法是查找"com.android.mms"
并将该意图传递给createChooser()
和targetedShareIntents
数组中的其他人,这意味着至少Direct Share适用于短信。
对于某些应用,请注意不要在targetedShareIntents
中设置类名,这意味着您最终会在选择器中出现Android系统。
对我而言,这个解决方案还不够好,而且我倾向于不从列表中排除我自己的应用程序。希望我的努力能带领某人做得更好。
以下代码是对此处示例的变体: Custom filtering of intent chooser based on installed Android package name
我在这里看到:http://stackoverflow.com/a/23036439 saulpower可能有更好的解决方案,但我无法使用我的UI。
private void shareExludingApp(Intent intent, String packageNameToExclude, String title) {
List<Intent> targetedShareIntents = new ArrayList<Intent>();
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
Intent directShare = null;
if (!resInfo.isEmpty()) {
for (ResolveInfo info : resInfo) {
Intent targetedShare = new Intent(intent);
if (!info.activityInfo.packageName.startsWith(packageNameToExclude)) {
targetedShare.setPackage(info.activityInfo.packageName);
targetedShare.setClassName(info.activityInfo.packageName,
info.activityInfo.name);
if (directShare == null && info.activityInfo.packageName.equals("com.android.mms")) {
directShare = targetedShare;
} else {
targetedShareIntents.add(targetedShare);
}
}
}
}
if (targetedShareIntents.size() > 0) {
if (directShare == null) {
directShare = targetedShareIntents.remove(0);
}
Intent chooserIntent = Intent.createChooser(directShare, title);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
targetedShareIntents.toArray(new Parcelable[] {}));
startActivity(chooserIntent);
}
else {
startActivity(Intent.createChooser(intent, title));
}
}
用法:
shareExludingApp(intent, getPackageName(), "Share via");