Android - 使用上一个操作与Intent共享

时间:2014-02-04 05:01:09

标签: android android-intent

当使用Intent进行共享(Intent.ACTION_SEND)时,我怎么能记住用于共享的最后一个应用并为该应用添加快捷方式?

在我的应用中,如果我刚刚使用gmail分享了我的文章,我可以添加一个“与gmail共享”的快捷方式,这样我就可以直接与gmail共享而无需选择应用程序吗?

提前感谢!

1 个答案:

答案 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;
    }
}

希望它有所帮助!