【问题标题】:Two launcher activities两个启动器活动
【发布时间】:2012-02-14 04:28:34
【问题描述】:

我有两个标记有意图过滤器的活动

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" />

<application
    android:name=".MyApp"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    <!-- work order activity -->
    <activity
        android:name=".app.WorkOrderActivity"
        android:label="@string/work_order"
        android:taskAffinity="com.package.task_for_work_order_activity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <!-- inventory activity -->
    <activity
        android:name=".app.InventoryActivity"
        android:label="@string/inventory"
        android:taskAffinity="com.package.task_for_inventory_activity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

问题是,当我安装 apk 文件时,没有显示任何活动,因为据我了解,系统无法指定应该显示什么活动。

我真的需要在启动器中显示两个活动,所以请不要提供有关从第二个活动中删除意图过滤器的建议,或者如果您这样做,请提供另一种在启动器中显示两个图标的方法。

【问题讨论】:

  • 请告诉更多细节,您为什么需要它?
  • 因为我有两个完全独立的 ui 模块,我将它们保存在不同的活动中,并希望它们都可以从 android 仪表板访问。
  • 使用最新的 Android 版本,上面的代码可以正常工作 - 在 android 清单中声明的​​第一个 Activity 获得偏好并显示给用户。

标签: android android-activity


【解决方案1】:

我认为这是因为“android.intent.action.MAIN”动作,这对我有用:

<application>
    <activity android:name=".MyActivityA" android:icon="@drawable/aicon"  android:label="@string/app_name">
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MyActivityB" android:icon="@drawable/bicon" android:label="@string/app_name">
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
 </application>

【讨论】:

  • 我试过了,但在这种情况下,我的启动器中没有出现第二个活动。我找不到它的解决方案。可能是 android 2.1 的问题
  • 不,我尝试删除第二个 MAIN 操作并在模拟器 2.3.3 上运行它,但没有用
【解决方案2】:

似乎可以通过使用任务关联属性来进行多个启动活动。在https://stackoverflow.com/a/3270422/819904查看答案

【讨论】:

  • 永远不要发布基本上是“其他地方”的答案......链接可能会被删除或更改......即使那样,它就像你向其他用户展示这样的:“你想解决这个问题?这里,去那里......”....然后变成“循环逻辑有效,因为循环逻辑有效,因为循环逻辑有效,因为goTo(charAt(0)
  • 请阅读此链接:“Provide context for links”,该链接声明:鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么在那里。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
  • 我只是要求您回答一个问题,通过给出答案,而不是将任何人重定向到其他任何地方(甚至“内部”stackoverflow 域),同样,该问题的所有者可以“删除”该问题,可以编辑答案,甚至可以关闭问题本身......我要求你改进你回答问题的方式,以帮助他人的方式。
【解决方案3】:

您需要通过将以下行添加到您的意图过滤器来指定哪个活动是默认活动:

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

将其插入默认活动并保留其余部分。那么它应该可以工作了。

您可能还想使用属性android:icon="@drawable/myothericon" 为您的第二个活动添加不同的图标

【讨论】:

  • 啊,这就是我要找的东西,但我找不到。这是正确的答案。
  • 年份,这对我很有用。
  • 在最新的 Android 版本上 - 如果有多个启动器活动并且如果我们没有放置这个 category 标记,那么 Android 中首先提到的活动清单文件将作为启动活动启动。
  • 当我有 2 个启动活动时,我的手机中会显示 2 个启动图标。如何删除2个图标?
  • 答案是否过时或完全错误?见stackoverflow.com/questions/5727828/…
【解决方案4】:

将具有android:name 属性的&lt;action&gt; 项目添加到两个意图过滤器:

<application
    android:name=".MyApp"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    <!-- work order activity -->
    <activity
        android:name=".app.WorkOrderActivity"
        android:label="@string/work_order"
        android:taskAffinity="com.package.task_for_work_order_activity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name=".app.WorkOrderActivity"/>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- inventory activity -->
    <activity
        android:name=".app.InventoryActivity"
        android:label="@string/inventory"
        android:taskAffinity="com.package.task_for_inventory_activity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name=".app.InventoryActivity"/>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

【讨论】:

    【解决方案5】:

    我在一个运行 API 级别 29 的模拟器上进行了测试。以下就足够了:

    <activity
        android:name=".MyActivity"
        android:label="Activity 1"
        android:exported="true">
    
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    
    </activity>
    
    <activity
        android:name=".MyActivity2"
        android:label="Activity 2"
        android:exported="true">
    
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    
    </activity>
    

    有人说这不起作用的原因是因为如果应用程序已经在运行,无论您单击启动器上的 2 个活动中的哪一个,它都会恢复运行应用程序中的最后一个活动。但是尝试(强制)停止应用程序,然后您将看到与您在启动器中单击的活动相对应的活动。

    这种行为通常不是我们想要的,所以我们可以使用&lt;activity android:taskAffinity="an.identifier.for.the.task"&gt;开始在不同的任务中运行activity,例如:

    <activity
        android:name=".MyActivity"
        android:label="Activity 1"
        android:exported="true"
        android:taskAffinity=".task.sellers">
    
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    
    </activity>
    
    <activity
        android:name=".MyActivity2"
        android:label="Activity 2"
        android:exported="true"
        android:taskAffinity=".task.buyers">
    
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    
    </activity>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 2017-05-30
      • 2018-10-12
      相关资源
      最近更新 更多