如果登录1次,再次启动应用程序时打开MainActivity?

时间:2018-05-15 12:58:00

标签: java android

我的应用流程是:

使用 SplashActivity启动应用 - > LoginActivity - > MainActivity

我使用会话管理器类来检查记住按钮,现在它的流程是:

SplashActivity - > MainActivity

但如果check为true,我需要登录,然后下次打开我的应用程序时,它将直接从MainActivity开始。

2 个答案:

答案 0 :(得分:0)

基本上你不能在运行时更改intent-filter中的定义..但是有一种方法可以使用<activity-alias>

来实现你需要的东西

如此answer所述,您需要按照以下步骤操作:

  1. SplashActivity拥有LAUNCHER <intent-filter>,并声明MainActivity没有<intent-filter>
  2. an <activity-alias> element in the manifest指向MainActivity LAUNCHER的{​​{1}}。

  3. <intent-filter>放在android:enabled="false"上,默认情况下已禁用,因此当首次安装应用或用户未登录时,<activity-alias>。< / p>

  4. 当用户登录,并且您想要更改以使SplashActivity成为启动器活动时,请使用MainActivityPackageManager启用setComponentEnabledSetting()禁用<activity-alias>

    SplashActivity

    定义你的别名

    // after login/logout success enable/disable components as required
    // use the correct "packagename", "alias" and activities names
    getPackageManager().setComponentEnabledSetting(
                                new ComponentName("packagename", "alias"),
                                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
                                PackageManager.DONT_KILL_APP);
    try {
        getPackageManager().setComponentEnabledSetting(
                                new ComponentName("packagename", "SplashActivity"),
                                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                                PackageManager.DONT_KILL_APP);
    
    } catch (Exception e) {
         e.printStackTrace();
    }
    

    当您启用别名时,它将作为您的启动器运行,它将使应用程序以<activity-alias android:name=".Blahblah" android:targetActivity=".MainActivity" android:label="@string/splashactivity_name" android:icon="@drawable/icon_splashactivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity-alias> 开始

  5. 当用户注销时,您可以执行相同的操作来更改默认配置

答案 1 :(得分:0)

我找到了另一种方法来执行此操作我在最后一个块中使用处理程序类On Splash我调用了LoginClass并进一步在MainClass中移动  现在我改变了一些代码。首先,它检查了SplashClass,SessionClass是否有数据。如果存在的数据比重定向到MainClass和MainClass中的Logout按钮我清除会话。 如果数据不存在,则进程从头开始。