自动更改启动另一个活动的活动

时间:2016-02-24 20:44:15

标签: android manifest intentfilter

我有两个活动,一个活动是“AppIntro”,另一个是“主页”。我想一次显示“AppIntro”,然后在应用程序启动时直接显示到主页上就不会显示它。

有一种方法可以从activity.java中操作intent-filters。

    <activity
        android:name=".DefaultIntro"
        android:label="@string/title_activity_default_intro"
        android:theme="@style/FullscreenTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.Launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

2 个答案:

答案 0 :(得分:0)

您可以将AppIntroActivity中的布尔标志保存为false。

首次打开此活动时,该标志为false,活动将加载。

当您从此活动移至另一个活动时,请将该标志设置为true。

在后续返回AppIntroActivity时,如果该标志为true,则立即移至第二个活动。

private SharedPreferences sharedPreferences;

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
final boolean hasOpenedBefore = sharedPreferences.getBoolean("HASOPEN", false);

if(hasOpenedBefore){
// move immediately to the next Activity
// secondly, remove it from the top activity stack
}

答案 1 :(得分:0)

我认为没有办法操纵清单文件中定义的意图过滤器。你可以这样做

  1. 当您打开DefaultIntro活动时,在SharedPreference中保存一个布尔值并将其设置为false
  2. 下次继续检查此值,如果false直接跳转到下一个活动而不设置其布局。
  3. DefaultIntro.java onCreate

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    Boolean showIntro = prefs.getBoolean("showIntro", true);
    if(showIntro)
    {
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean("showIntro", false);
        editor.commit();
    }
    else
    {
        Intent intent = new Intent(this, MainActivity.java);
        startActivity(intent);
        finish();
    }