包括两个意图过滤器,共享相同的活动、动作、类别和 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

如何在android中使用意图过滤器获取数据

Ruby on Rails - 针对相同数据查看两个不同的过滤器

API Guide:APP组件-意图和意图过滤器

多个意图打开错误活动的待处理意图