意图过滤器:使用Launcher和Browsable类别与两个操作

8

TL;DR 我能在一个 Intent Filter 中使用两个操作和两个类别吗?

我的应用由一个活动和五个片段组成。我在这个活动中有一个 Intent Filter。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

今天我看到一个关于“应用程序未被Google索引”的lint消息,出现在清单文件的application标签周围。于是我进行了一些搜索并了解到,你可以使用此功能通过谷歌搜索对你的应用进行索引。如果安卓用户从chrome/systemBrowser浏览网页链接“www.example.com/myapp”,他将会进入我的应用而不是网页,是这样吗?
现在,我需要在活动中添加ActionView,那么我的intent-filter将变成:
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/myapp" />
 </intent-filter>

但是,我看过一些资料表明使用两个操作不好。这是一个逻辑或操作。Intent-Filter只会匹配其中一个:
    1. 具有MAIN操作和LAUNCHER类别的意图
    1. 具有MAIN操作和BROWSABLE类别的意图
    1. 具有VIEW操作和LAUNCHER类别的意图
    1. 具有VIEW操作和BROWSABLE类别的意图
理解上说,它应该在设备上使用第一个选项打开应用程序,并且当用户使用提供的“www.example.com/myapp”浏览器时,应使用第一和第四个选项从链接中打开应用程序。
我查看了这个问题,但我需要一个示例来确保。
这很令人困惑。我可能完全错了,请指导我。
1个回答

20

通过SO聊天中的某位帮助,我被告知要使用单独的intent-filters

    <activity
        android:name=".activities.MainActivity"
        android:label="@string/app_name">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/prefix" />
        </intent-filter>

    </activity>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接