[英]If Login 1 time, open MainActivity when ever app launch again?
我的应用流程是:
使用SplashActivity -> LoginActivity -> MainActivity启动应用程序
我使用会话管理器类来检查记住按钮,现在它的流程是:
SplashActivity -> MainActivity
但是如果检查为真,我需要登录,然后下次当我打开我的应用程序时,它将直接从 MainActivity 启动。
基本上你不能在运行时更改意图过滤器中定义的..但是有一种方法可以使用<activity-alias>
来实现你需要的
如this answer中所述,您需要执行以下步骤:
SplashActivity
具有LAUNCHER
<intent-filter>
并声明您的MainActivity
没有<intent-filter>
。 在清单中创建一个<activity-alias>
元素,指向具有LAUNCHER
<intent-filter>
MainActivity
。
将android:enabled="false"
放在<activity-alias>
,因此默认情况下它是禁用的,因此当首次安装应用程序或用户未登录时, SplashActivity
.
当用户登录时,您希望将MainActivity
更改为启动器活动,请使用PackageManager
和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>
有了这个,当你启用你的别名时,它会作为你的启动器工作,它会让应用程序以MainActivity
启动
当用户注销时,您可以做同样的事情来改回默认配置
我找到了另一种方法来做到这一点我在最后一个块中使用处理程序类 On Splash 我调用 LoginClass 并进一步移动 MainClass 现在我更改了一些代码。 首先它检查了 SplashClass SessionClass 是否有数据。 如果数据存在而不是重定向到 MainClass 并从 MainClass 中的注销按钮我清除会话。 如果数据不存在,则从头开始处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.