应用启动器图标在屏幕上消失

9
我试图为一个简单的应用程序设置意图过滤器,以处理URL。我应用了"intent-filter" 的基本标签,如 "action" ,"category"。
在这里,我使用了2个"intent-filter"标签。
<activity
        android:name=".MyBrowserActivity"
        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" />
           <data android:scheme="http" />
           <category android:name="android.intent.category.BROWSABLE"/>
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</activity>

如果我在一个“intent-filter”标记中应用以下意图过滤器,则安装后不会显示启动器图标。
<activity
        android:name=".MyBrowserActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="http" />
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</activity>

我想问的主要问题是,“当只有1个“intent-filter”时,为什么应用程序启动器图标在第二种情况下消失。”

1
我认为我们不能为Activity定义多个intent-filters - Gopal Gopi
不是真的:请参阅https://developer.android.com/guide/components/intents-filters.html中的示例。 - flx
3个回答

18
您需要将意图过滤器拆分为两部分。这样您就有了:
<INTENT FILTER>
Action category 
</INTENT FILTER>
<INTENT FILTER>
Action category data
</INTENT FILTER>

为什么我们需要将它们拆分?难道我们不能将多个“action”、“category”添加到同一个intent-filter中吗? 我认为您不需要在不同的intent-filter标签后面写1或2。 - Atul Dhawan
不需要这样做。那只是为了展示它的两个意图过滤器而不是一个。不,你不能合并意图过滤器。但是你可以在一个活动中有多个意图过滤器。抱歉格式不好,我正在用手机打字。 - Orphamiel

1
intent-filter 拆分为两个活动:
    <activity
        android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="main"
                android:scheme="example" />
        </intent-filter>
    </activity>
    <activity
        android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

你不需要使用两个单独的活动来实现这一点。如果你有两个活动,其中一个可以是“MAIN”操作,那就没问题了。但是,如果你没有并且想将单个活动指定为MAINVIEW的意图操作处理程序,则必须按照@Orphamiel在他的答案中建议的做法。将intent-filter拆分为每个活动下的一个intent-filter组的一个操作。 - praneetloke
这里是一个链接,可以阅读有关intent-filter的内容。以下是它的直接引用: 当您想要处理多种类型的意图,但仅在特定的操作,数据和类别类型组合中时,则需要创建多个意图过滤器。 - praneetloke

0

正如 @praneetloke 所提到的,只是将其分成不同的 <intent-filter> 组。 我觉得缺少一个例子,所以在这里给出。希望能有所帮助。

<activity android:name=".activities.RegisterActivity" android:launchMode="singleTask">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter  android:autoVerify="true">
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:host="path365.page.link" android:scheme="https"/>
    <data android:host="path365.page.link" android:scheme="http"/>
  </intent-filter>
</activity>

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