如何在打开应用程序时dynamicselect要启动的活动

我正在编写一个应用程序,要求您在使用之前login到服务。 从我对android的理解到目前为止,您必须从清单中的启动器打开时select启动哪个活动。 我不知道我想在编译时启动哪个活动。 我希望用户点击图标,然后检查他们是否已login,然后根据是否启动login活动或主要应用程序活动来决定。 有没有办法做到这一点?

不,因为您必须运行一些代码,所以无法以声明方式(在清单中)说这个。 您必须启动一个活动(在清单中设置),然后根据用户是否login来确定此活动,或者通过Intent来启动第二个活动:

final Class<? extends Activity> activityClass; if(userIsLoggedOn()) activityClass = LoggedOnActivity.class; else activityClass = LogInActivity.class; Intent newActivity = new Intent(context, activityClass); context.startActivity(newActivity); 

还有另外一种方法可以使用活动别名 。

  1. 在清单中:

     <activity android:name=".LoginActivity" android:icon="@drawable/ic_launcher_main" android:label="Login" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:icon="@drawable/ic_launcher_main" android:label="MainActivity" > </activity> <activity-alias android:name=".AliasActivity" android:label="AliasActivity" android:enabled="false" android:targetActivity=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> 

    2.login活动中的某个地方:

     String s = getApplicationContext().getPackageName(); ComponentName cm = new ComponentName(s, s+".AliasActivity"); ComponentName cm2 = new ComponentName(s, s+".Login"); PackageManager pm = this.getPackageManager(); pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 1); pm.setComponentEnabledSetting(cm2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

之后,应用程序将被杀死一次,下次启动应用程序时,MainActivity将成为启动器。

就像上面的@auval说的,我testing下面的代码,它做得很好! 首先,AndroidManifest.xml文件如下所示:

  <activity android:name=".LauncherActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".MainActivity"> </activity> <activity-alias android:name=".AliasActivity" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity-alias> 

其次,你可以把这些代码放在MainActivity.class的某个地方:

 private void changeLauncher() { String s = getApplicationContext().getPackageName(); ComponentName cm = new ComponentName(s, s + ".AliasActivity"); ComponentName cm2 = new ComponentName(s, s + ".LauncherActivity"); PackageManager pm = this.getPackageManager(); pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP ); pm.setComponentEnabledSetting(cm2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } 

现在,当您首次启动应用程序时,LauncherActivity将启动,当您退出应用程序时,再次运行应用程序,MainActivity将启动。