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

Java 如果登录1次,请在再次启动应用程序时打开MainActivity?,java,android,Java,Android,我的应用程序流程是: 使用SplashActivity->LoginActivity->MainActivity启动应用程序 我使用会话管理器类来检查记住按钮,现在它的流程是: SplashActivity->MainActivity 但如果检查为真,我需要登录,然后下次打开我的应用程序时,它将直接从MainActivity启动。基本上,您无法在运行时更改在intent中定义的筛选器。。但是有一种方法可以使用实现您需要的功能,您需要遵循以下步骤: 让您的SplashActivity拥有启动器,并

我的应用程序流程是:

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

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

SplashActivity->MainActivity


但如果检查为真,我需要登录,然后下次打开我的应用程序时,它将直接从MainActivity启动。

基本上,您无法在运行时更改在intent中定义的筛选器。。但是有一种方法可以使用
实现您需要的功能,您需要遵循以下步骤:

  • 让您的
    SplashActivity
    拥有
    启动器
    ,并声明您的
    main活动
    ,无
  • 指向具有
    启动器的
    main活动

  • 将android:enabled=“false”
  • 放在
    上,因此它在默认情况下是禁用的,因此当应用程序首次安装或用户未登录时,
    Splash活动

    // 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();
    }
    
  • 当用户登录,并且您希望更改
    main活动
    为启动器活动时,请使用
    PackageManager
    setComponentEnabledSetting()
    启用
    并禁用
    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>
    
    
    
    使用此选项,当您启用别名时,它将作为启动器工作,并使应用程序以
    MainActivity


  • 当用户注销时,您可以做同样的事情来更改回默认配置

    我找到了另一种方法,我在最后一个块中的Splash上使用handler类,我调用LoginClass并在MainClass中进一步移动 现在我更改了一些代码。首先,它在SplashClass上检查SessionClass是否有数据。如果数据存在,则重定向到MainClass,并从MainClass I中的注销按钮清除会话。
    如果数据不存在,则从头开始处理

    那是不可能的。从launcher,只有一个应用程序入口点,您必须从SplashActivity重定向到MainActivity。你只能有一个启动程序。是的,我知道通常我们有一个启动程序活动,从我们的应用程序开始,但当我们看到Whatsapp应用程序时,它的功能不是从初始状态打开活动,而是从MainActivity打开应用程序,是我的错吗wrong@rafid059我有办法解决我的问题,否则谢谢你reply@dhiku我找到了解决问题的方法,否则感谢您在单击应用程序时给出的回复“未找到应用程序”。您是如何定义活动别名的?use是否提供了正确的目标活动和意图筛选器?在清单中,应为别名而不是初始活动设置意图筛选器启动器。。您需要卸载/重新安装应用程序以重置对测试的更改抱歉再次打扰您@A.A,但我从初始步骤告诉您,我的场景是应用程序启动(步骤1)启动活动,而不是登录活动打开,(步骤2)登录活动我有“记住我”复选框。如果user checked=true,则按loginBtn than Session保存此值,当再次启动应用程序时,应打开MainActivity other wise app open(从步骤(1)开始)。