4

假设在我的应用程序中,用户可以发布帖子并向其他用户发送消息,并且我想将我的应用程序注册为共享文本或图像时出现在共享通过选择器中的组件,我正在定义我的 2我的活动AndroidManifest.xml如下(比如这个官方例子):

<activity 
    android:name=".SharePostActivity"
    android:label="MyApp (Post)">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <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=".ShareMessageActivity"
    android:label="MyApp (Message)">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

共享文本时,这工作得很好,我在可用于共享文本的应用程序中看到我的应用程序的 2 个图标,命名为MyApp (Post)& MyApp (Message)

共享图像时会出现问题,因为清单中只有一个带有第二个定义标签的图标(即MyApp (Message)),实际上它打开了清单中第一个定义的活动(即SharePostActivity),

那么,如何在共享图像时显示 2 个选项(就像共享文本时发生的情况一样)?

(我尝试过运行 Nougat 的模拟器和运行 Oreo 的真实设备)

- - - 更新 - - -

我发现这种奇怪的行为只有在从Google 的照片应用程序共享图像时才会发生,但是从其他应用程序共享图像时一切正常!

4

1 回答 1

1

一些调查得出了一个解决方案:每个人都intent-filter必须包含android:label指向资源的 which ,而不是硬编码的字符串。

...
<intent-filter android:label="@string/first_value">
...

不同Activities的必须有不同的标签,所以在你的情况下,清单应该看起来像

<activity 
    android:name=".SharePostActivity"
    android:label="@string/my_app_post">
    <intent-filter
        android:label="@string/my_app_post">
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter
        android:label="@string/my_app_post">
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

<activity
    android:name=".ShareMessageActivity"
    android:label="@string/my_app_message">
    <intent-filter
        android:label="@string/my_app_message">
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter
        android:label="@string/my_app_message">
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>
于 2018-08-14T10:28:10.267 回答