Как показывать заставку только тогда, когда приложение запускается «свежо»? - PullRequest
2 голосов
/ 07 октября 2011

Я хочу показывать заставку только один раз в течение жизненного цикла приложения. Вот мой код:

SplashScreenActivity.java:

final int welcomeScreenDisplay = 3000;

Thread welcomeThread = new Thread() {

    int wait = 0;

    @Override
    public void run() {
        try {
            super.run();

            while (wait < welcomeScreenDisplay) {
                sleep(1000);
                wait += 1000;
            }
        } catch (Exception e) {
            System.out.println("EXc=" + e);
        } finally {

            // Start other Activity
            startActivity(new Intent(SplashScreenActivity.this,
                    MainActiviey.class));
            finish();
        }
    }
};
welcomeThread.start();

Manifest:

    <activity android:name=".SplashScreenActivity" android:label="test"
    android:noHistory="true"
        android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden|keyboard">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActiviey" android:label="test"
         android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden|keyboard">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Проблема в том, что если я нажму на кнопку аппаратного HOME, чтобы скрыть приложение, и снова открою его в списке приложений. Он снова покажет заставку (вместо MainActivity). Можно ли показывать заставку только тогда, когда приложение запускается «свежим» (не отображается в onresume ())? Спасибо!

Ответы [ 3 ]

6 голосов
/ 07 октября 2011

У вас не может быть этого намерения для двух действий:

  <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

Также, возможно, вы захотите скрыть заставку от стека истории, если вы решили запустить в нем другое действие, согласно предложению Эша.

Вы можете использовать этот флаг на теге активности:

android:noHistory="true"  
2 голосов
/ 07 октября 2011

Да, это возможно. Используйте SharedPreferences , чтобы сохранить флаг, который будет указывать, что ваш всплеск уже был показан. Проверьте это в onCreate() методе вашего заставки и, если он присутствует, запустите следующее действие.

0 голосов
/ 07 декабря 2018
public class SplashActivity extends AppCompatActivity {

Handler handler;
private final int SPLASH_DISPLAY_LENGTH = 2000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    SplashStart();

}

private void SplashStart() {
    handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            Intent intent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    }, SPLASH_DISPLAY_LENGTH);
}


@Override
protected void onResume() {
    super.onResume();

    }
}
...