我有2项活动,LoginActivity
和MainActivity
。在第一个活动中,我登录用户并将他重定向到MainActivity
。我还在MainActivity
创建了一个注销按钮,该按钮调用了这种注销方法:
private void signOut() {
Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
}
每次应用程序启动时,我都会检查用户是否已登录。如果用户已登录,则用户仍在MainActivity
,如果没有,则会重定向到{{1} }。
问题是,当用户没有进入时,应用程序首先启动LoginActivity
,然后启动MainActivity
。
这就是LoginActivity
的样子:
AndroidManifest
如果用户未登录,如何在不打开<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" />
的情况下启动应用程序?
答案 0 :(得分:2)
您创建第三个Activity,这是您真正的启动活动。然后就确定哪一个应该是下一个。
@Override
public void onCreate(Bundle si) {
...
if (isLoggedIn()) {
goToMain();
} else {
goToLogin();
}
finish();
}
这将打开一个活动,决定去哪里。活动加载时,您可能会在屏幕上看到轻微的闪烁。这是关于样式transparent activity的讨论。 `
答案 1 :(得分:2)
我认为你最好能做的是在MainActivity
中有两个布局,比如MainLayout
和LoginLayout
,如果用户没有登录,则隐藏MainLayout
,并在同一个活动中显示LoginLayout
,即MainActivity
,并让用户登录,然后再次隐藏LoginLayout
并显示MainLayout
。或者,不是隐藏LoginLayout
,而是重新启动活动。
将这些条件置于onCreate()
陈述下if-else
的开头。
有点像这样(在onCreate
的{{1}}中):
MainActivity
答案 2 :(得分:0)
将决策代码移至第三个活动并将其设置为新的启动活动。
if (condition1) {
startActivity(intent1);
}
else {
startActivity(intent2);
}
并改变新活动的主题如下
android:theme="@android:style/Theme.NoDisplay