我需要我的应用程序让一个活动(注册)成为首次安装应用程序时启动的第一个活动,但是在初始运行之后它将有一个不同的活动(LogInActivity)是第一个启动的活动...我有把代码放入使得Register活动只运行一次,但我无法弄清楚如何改变我的清单以获得所需的结果。我已经尝试将MAIN操作移动到Register活动,但这会导致每次运行我的应用程序时都会启动它。当MAIN操作在LogInActivity中时,Register根本不运行。我也尝试在我的清单中添加一个DEFAULT动作,在我执行MAIN操作的相反活动中,但这也没有用,并且在进一步研究DEFAULT时我不相信这是我需要的。那么我需要在XML中添加一些其他意图吗?
清单:
<application
android:allowBackup="true"
android:icon="@drawable/skey"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
///////////FIND INFO ACTIVITY
<activity
android:name=".FindInfoActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.LogInActivity" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//////////LOG IN ACTIVITY
<activity
android:name=".LogInActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.LogInActivity" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//////////REGISTER ACTIVITY
<activity
android:name=".Register"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.LogInActivity" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
答案 0 :(得分:3)
除非您希望用户能够从三个单独的项目中从主屏幕启动应用程序,否则不要有三个单独的LAUNCHER活动(这里有有效的用例,但不是这样)。
有一个处理启动应用程序的活动。它检查SharePreferences中的布尔值,然后从那里开始相应的活动。然后只需完成活动,这样当用户按下“返回”时用户就不会重新打开它。
public class LauncherActivity extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
if (firstTimeRunning()) {
// start register activity.
} else {
// start login activity.
}
finish();
}
}
在Manifest中,只需将此活动视为:
<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
您的注册活动或登录活动不需要任何IntentFilters,因为它们永远不会通过隐式意图打开,也没有任何特殊权限(我可以看到)。
答案 1 :(得分:1)
使用 SharedPreference 。当您第一次打开应用程序时:
SharedPreferences shared;
shared=getSharedPreferences("com.example", Context.MODE_PRIVATE);
shared.edit().putBoolean("first_time",true).apply();
第一个活动的onCreate()
中的执行此操作:
SharedPreferences shared;
shared=getSharedPreferences("com.example", Context.MODE_PRIVATE);
if(shared.getBoolean("first_time",false)){
startActivity(new Intent(FirstActivity.this, NewFirstActivity.class));
finish();
}
是“存储”数据和状态的最简单方法。 SharedPreference也适用于Strings,Int值等(如果你不想要布尔值)
答案 2 :(得分:0)
在您的Manifest
中,您应该只有一个启动器类,在同一类onCreate
方法中检查已登录的条件(SharedPreference
)。如果是,则使用Intent
启动HomeActivity,否则如果用户已注册并注销,则启动LoginActivity。当用户登录时,在SharedPreference
中保存帐户ID /会话详细信息/用户详细信息,您可以在启动器类中验证这些信息以启动特定活动。
答案 3 :(得分:0)
正如Mariano所说,你可以使用SharedPreferences。如果您不想在启动时打开设置,可以使用对话框让用户决定转到您的设置或不执行任何操作。
顺便说一句,我认为使用SharedPreferences来存储登录信息(用户名和密码)是最好的做法,而不是每次启动应用程序时都要询问这些值。