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