包括两个意图过滤器,共享相同的活动、动作、类别和 mimeType
Posted
技术标签:
【中文标题】包括两个意图过滤器,共享相同的活动、动作、类别和 mimeType【英文标题】:Including two intent-filters, sharing same activity, action, category and mimeType 【发布时间】:2021-11-10 00:48:32 【问题描述】:我想添加一个分享功能来与我的应用分享照片, 该应用程序有两个主要功能,每个都使用照片作为用户的主要输入数据。 所以我需要两个共享按钮来实现这两个功能。我在 androidManifest.xml 的应用程序标签中添加了这个:
<activity android:name="MainActivity">
<intent-filter android:label="@string/ENCODE">
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter android:label="@string/DECODE">
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity >
但仅应用了第一个意图过滤器。 但是当我为第二个过滤器指定另一个活动时,它起作用了:
<activity android:name="MainActivity" android:label="@string/ENCODE">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity >
<activity android:name="com.company.myapp.DecodeActivity" android:label="@string/DECODE">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity >
但我必须创建DecodeActivity
并从MainActivity
复制设置代码,例如,这会导致一些问题,例如它们共享一些资源(照片选择器)在活动之间变得模棱两可,并从 DecodeActivity 导航到 MainActivity,因为它最初使用 MainActivity。
我在这里解决传入的意图:
if (Intent.ActionSend.Equals(Intent.Action) && Intent.Type != null && Intent.Type.StartsWith("image/"))
await ImageDispatcher.HandleSendImage(ContentResolver, Intent, "Encode");
【问题讨论】:
【参考方案1】:这两个intent过滤器只是标签不同,不影响过滤器的功能。 我认为您应该有两个活动(每个操作一个),并且两者都应该具有相同的基类。将特定于操作的代码放在特定于操作的活动中。 或者,您可以询问用户如何处理图像。
【讨论】:
以上是关于包括两个意图过滤器,共享相同的活动、动作、类别和 mimeType的主要内容,如果未能解决你的问题,请参考以下文章
阅读《Android 从入门到精通》(34)——Intent Filter
阅读《Android 从入门到精通》(34)——Intent Filter