如何在第一次启动活动时启动活动,但仅在第一次运行应用程序时启动

时间:2015-10-06 17:50:49

标签: android xml android-activity

我需要我的应用程序让一个活动(注册)成为首次安装应用程序时启动的第一个活动,但是在初始运行之后它将有一个不同的活动(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>

4 个答案:

答案 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来存储登录信息(用户名和密码)是最好的做法,而不是每次启动应用程序时都要询问这些值。