【问题标题】:App Launcher Icon Disappears from screen应用启动器图标从屏幕上消失
【发布时间】:2014-02-18 05:02:01
【问题描述】:

我试图为一个简单的应用程序设置意图过滤器来处理 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>

但如果我在仅 1 个“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 个“意图过滤器”。

【问题讨论】:

标签: android android-intent


【解决方案1】:

您需要将意图过滤器分成两部分。所以你有

<INTENT FILTER>
Action category 
</INTENT FILTER>
<INTENT FILTER>
Action category data
</INTENT FILTER>

【讨论】:

  • 为什么我们需要拆分它们?我们不能向同一个意图过滤器添加多个“动作”、“类别”吗? ?而且我认为您不需要在不同的意图过滤器标签之后写 1 或 2。
  • 你没有。那只是为了显示它的两个意图过滤器,而不是一个。不,您不能组合意图过滤器。但是,您可以在一个活动中拥有许多意图过滤器。抱歉格式不好。用我的手机打字。
【解决方案2】:

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>

【讨论】:

  • 您不需要为此使用 2 个单独的活动。如果您有两项活动,其中一项可以是MAIN 操作,那很好。但是,如果您不这样做并且您想将单个活动指定为MAINVIEW 的意图操作处理程序,那么您必须执行@Orphamiel 在他的回答中建议的操作。将intent-filter 拆分为活动下的每个intent-filter 组的一项操作。
  • 这里是阅读intent-filter的链接。这是从那里直接引用的:When you want to handle multiple kinds of intents, but only in specific combinations of action, data, and category type, then you need to create multiple intent filters.
【解决方案3】:

正如@praneetloke 所说,只是为了分成不同的&lt;intent-filter&gt; 组。 我觉得它缺少一个例子,所以就这样吧。希望对您有所帮助。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多