Android App活动安装为多个图标

时间:2010-08-20 00:05:49

标签: android

我的Android应用有2项活动。登录屏幕和搜索屏幕。当我在模拟器或我的设备上部署应用程序时,我看到同一应用程序的2个图标。当我点击图标1时,它会打开屏幕1(登录屏幕),当我点击图标2时,它会打开屏幕2(搜索屏幕)。我登录时的逻辑应显示搜索屏幕。不知道我什么时候犯了错误。

3 个答案:

答案 0 :(得分:78)

您的清单文件应该只在您希望拥有图标的活动中包含此行:

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

根据您的描述,听起来两个活动都有这一行。

答案 1 :(得分:20)

在您的清单文件中,当您在两个不同的活动标签中有以下标记时,Android应用程序似乎已安装两次。

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

答案 2 :(得分:3)

@Adrian C对他的回答所做的评论解决了我们的问题。

我们的主应用程序的清单文件只有一个javax.naming.NamingException: WFLYNAM0027: Failed instantiate InitialContextFactory org.jboss.naming.remote.client.InitialContextFactory from classloader ModuleClassLoader f or Module "deployment.SystemConfiguration.ear.system-configuration-lifecycle.sar:main" from Service Module Loader [Root exception is java.lang.ClassNotFoundException: org.jb oss.naming.remote.client.InitialContextFactory from [Module "deployment.SystemConfiguration.ear.system-configuration-lifecycle.sar:main" from Service Module Loader]] org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:118) org.jboss.as.naming.InitialContext.init(InitialContext.java:99) javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154) org.jboss.as.naming.InitialContext.<init>(InitialContext.java:89) org.jboss.as.naming.InitialContextFactory.getInitialContext(InitialContextFactory.java:43) javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684) javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) javax.naming.InitialContext.init(InitialContext.java:244) javax.naming.InitialContext.<init>(InitialContext.java:216) com.abcd.services.core.systemconfiguration.conn.impl.SystemConfigurationTimerEjbExecutor.getSystemConfigurationTimerEJB(SystemConfigurationTimerEjbExecutor.java:96) com.abcd.services.core.systemconfiguration.conn.impl.SystemConfigurationTimerEjbExecutor.startScheduler(SystemConfigurationTimerEjbExecutor.java:56) com.abcd.services.core.systemconfiguration.conn.impl.SystemConfigurationAppLifeCycle.start(SystemConfigurationAppLifeCycle.java:65) org.jboss.as.service.AbstractService.invokeLifecycleMethod(AbstractService.java:76) org.jboss.as.service.StartStopService$1.run(StartStopService.java:61) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745) org.jboss.threads.JBossThread.run(JBossThread.java:320) Caused by: java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory from [Module "deployment.SystemConfiguration.ear.system-configuration-lifec ycle.sar:main" from Service Module Loader] org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198) org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363) org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351) org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93) java.lang.Class.forName0(Native Method) java.lang.Class.forName(Class.java:348) org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:113) 标记,只指定一个活动作为应用程序的启动器活动。

所以我不得不深入了解......

我们包含了图书馆项目(幸运的是由我们编写),其中一个图书馆项目的清单文件在其活动中有一个intent-filter标记,将该活动指定为启动器活动。

当我们在我们的主应用程序(它有自己的intent-filter指定启动器活动)中包含该库项目时,完整的源代码看到两个intent-filter标记指定两个活动作为启动器活动,因此创建了两个应用程序图标。

当我们删除指定库项目中的启动器活动的intent-filter时,第二个应用启动器图标消失了。