当使用Intent进行共享(Intent.ACTION_SEND
)时,我怎么能记住用于共享的最后一个应用并为该应用添加快捷方式?
在我的应用中,如果我刚刚使用gmail分享了我的文章,我可以添加一个“与gmail共享”的快捷方式,这样我就可以直接与gmail共享而无需选择应用程序吗?
提前感谢!
答案 0 :(得分:2)
没有侦听器可以检测您在默认意图选择器中选择的应用程序
因此,您必须自己创建一个包含ACTION_SEND
所有意图的对话框。
您可以通过以下代码获取ACTION_SEND
的意图列表。
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
然后,使用列表构建一个对话框,为每个意图添加监听器
用户点击其中一个后,保存其包名称。您可以按ResolveInfo.activityInfo.name
检索包名称。
接下来,您可以使用程序包名称来过滤ACTION_SEND
,仅启动已过滤的应用程序
这是推出Twitter应用程序的片段。
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new ComponentName(activity.applicationInfo.packageName,activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
}
}
希望它有所帮助!