将仅在特定应用程序中可见的操作添加到 ACTION_SEND?

Posted

技术标签:

【中文标题】将仅在特定应用程序中可见的操作添加到 ACTION_SEND?【英文标题】:Adding action visible only in specific applications to ACTION_SEND? 【发布时间】:2012-01-29 21:53:07 【问题描述】:

我正在使用:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("image/jpeg");
(...)

分享在我的应用程序中生成的图像。我想将自定义操作(将图像保存到图库)添加到由

创建的意图
Intent.createChooser(i, "...");

我正在考虑为 android.intent.action.SEND 操作添加带有意图过滤器的活动,但这将使我的活动可见并可供所有应用程序使用。我可以将 setType("image/jpeg") 更改为 setType("image/*") 并添加

<data android:mimeType="image/foobar">

intent-filter,但这将使我的活动对所有请求 image/* 的应用程序可见。

有没有办法通过调用程序包名称(或其他可以区分我的应用程序与其他应用程序的名称)过滤操作可见性?

【问题讨论】:

更好的解决方案是滚动您自己的选择器对话框,通过您自己的手动内容和从PackageManager 调用queryIntentActivities() 的结果填充。 【参考方案1】:

Android 有一个很好的解决方案来解决这个要求,诀窍是Intent.EXTRA_INITIAL_INTENTS

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/jpeg");

List<Intent> myAddedIntents = new ArrayList<Intent>();
Intent myIntent = new Intent(...);
myAddedIntents.add(myIntent);

Intent chooserIntent = Intent.createChooser(intent, "Send via:");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
        myAddedIntents.toArray(new Parcelable[] ));

startActivity(chooserIntent);

【讨论】:

以上是关于将仅在特定应用程序中可见的操作添加到 ACTION_SEND?的主要内容,如果未能解决你的问题,请参考以下文章

仅在特定产品变体属性中显示Woocommerce购物车中的消息

仅在表格视图的特定单元格上显示和隐藏视图

将仅在启动时运行一次的 Elastic Beanstalk 配置命令放在哪里?

仅在特定时间范围内显示指标

如何仅在 vue.js 中对特定点击的卡片应用切换/样式?

Next.js:如何将仅外部客户端的 React 组件动态导入到开发的服务器端渲染应用程序中?