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

时间:2016-11-15 18:42:29

标签: android android-intent android-manifest intentfilter deep-linking

TL; DR我可以在一个intent-filter中使用两个动作和两个类别吗?

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

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

今天,我在清单文件中的application标记周围看到一条lint消息“App无法通过Google编制索引”。所以,我做了一些搜索,并且知道你可以用它来通过谷歌搜索索引你的应用程序。如果Android用户从chrome / systemBrowser浏览Web链接“www.example.com/myapp”,他将被带到我的应用程序而不是网页。正确?

现在,我必须向活动添加一个ActionView。而且,我的意图过滤器将成为,

<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>

但是,我已经读到使用两个动作并不好。这是一个逻辑OR操作。 Intent-Filter只匹配其中一个:

    1. MAIN行动和启动类别的意图
    1. 具有MAIN操作和BROWSABLE类别的意图
    1. 使用VIEW操作和启动类别
    2. 的意图
    1. 具有VIEW操作和BROWSABLE类别
    2. 的意图

据我所知,它应该在第一个选项的设备上打开应用程序,当用户使用提供的“www.example.com/myapp”浏览浏览器时,它应该使用第一个和第四个选项从链接打开应用程序

我看过这个question,但我需要确定一个例子。

令人困惑。我可能完全错了,请指导我。

1 个答案:

答案 0 :(得分:9)

在SO Chat的某人的帮助下,我被告知要使用单独的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>