Мой экран приветствия не отображается при втором запуске приложения

#android #android-intent #android-activity #timertask

#Android #android-намерение #android-активность #timertask

Вопрос:

В моем приложении для Android есть экран приветствия. Он отображается, когда я подключаю USB-кабель к компьютеру и тестирую его. Но когда я снова открываю приложение (после его установки) на телефоне, оно не отображает экран приветствия. Он напрямую переходит ко второму действию. Пожалуйста, помогите мне с этим.

Это код для первого экрана.

 public class MainActivity extends Activity {

    Intent i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Timer().schedule(new TimerTask(){
            public void run() { 
                startActivity(new Intent(MainActivity.this, MainMenu.class));
            }
        }, 2000 /*amount of time in milliseconds before execution*/ );
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
  

Я хочу отображать экран приветствия каждый раз, когда приложение открыто.

Большое вам спасибо за ваши ответы. На самом деле все решения работают, когда я прокомментировал этот метод в MainMenu.java класс. (Второе действие)

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) 
        {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);

                // set title
                alertDialogBuilder.setTitle("Do you want to exit from Cooparate LOLC App?");

                // set dialog message
                alertDialogBuilder
                    .setMessage("Are you sure !")
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, close current activity
                            Intent startMain = new Intent(Intent.ACTION_MAIN);
                            startMain.addCategory(Intent.CATEGORY_HOME);
                            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(startMain);
                        }
                      })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, just close the dialog box and do nothing
                            dialog.cancel();
                        }
                    });

                    // create alert dialog
                    AlertDialog alertDialog = alertDialogBuilder.create();

                    // show it
                    alertDialog.show();
                }
        return super.onKeyDown(keyCode, event);
    }
  

Но я хочу, чтобы при нажатии кнопки «Назад» появлялось диалоговое окно, как в описанном выше методе. Как я могу выполнить обе задачи.

  1. Появляется экран приветствия каждый раз, когда я открываю приложение
  2. При нажатии кнопки «Назад» появляется диалоговое окно

Комментарии:

1. Не могли бы вы опубликовать свой манифест?

2. Один из приведенных ниже ответов наверняка сработает. Просто хотел отметить, что вам нужно включить функцию finish(), чтобы действие splash завершилось после перехода к основному действию, чтобы пользователь не мог нажать назад и достичь splash.

Ответ №1:

Я предполагаю, что вы, возможно, неправильно закрываете свое приложение с помощью кнопки «назад». Если вы закроете его, нажав кнопку «Домой», он будет только приостановлен и остановлен. Итак, как вы можете видеть из этой диаграммы, при повторном открытии вызываются onRestart() -> OnStart() , но не onCreate(), поэтому экран приветствия не появляется!

Комментарии:

1. ДА. Когда я нажимаю кнопку «Назад» в главном меню (второе действие), появляется диалоговое окно с сообщением, хочу ли я закрыть приложение или нет. Именно так он закрывает приложение.

2. И когда я комментирую этот метод OnKeyDown(), он работает отлично.

Ответ №2:

Вы можете сделать это следующим образом,

Сначала объявите класс

 private class CountDown extends CountDownTimer
{
    public CountDown(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}

    @Override
    public void onFinish() 
    {
       startActivity(new Intent(MainActivity.this, MainMenu.class));
    }

    @Override
    public void onTick(long arg0) {}
  

Затем вызовите его в методе onCreate ()

 private CountDown countDown;
protected void onCreate(Bundle savedInstanceState) 
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        countDown = new CountDown ( 2000,1000 );
        countDown.start();
}
  

Это, безусловно, будет выполняться каждый раз.

Ответ №3:

Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

 new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
     startActivity(new Intent(MainActivity.this, MainMenu.class));
   }
},2000);
  

Ответ №4:

Или вы можете попробовать использовать это

 private Handler handler;
private Runnable runnable;
  

// В onCreate () вы используете это

 handler = new Handler();
    runnable = new Runnable()
    {
        public void run()
        {
            startActivity(new Intent(MainActivity.this, MainMenu.class));
            finish();
        }
    };
    handler.postDelayed(runnable, 3000);
  

Ответ №5:

 public class MainActivity extends Activity {

    private final int SPLASH_DISPLAY_LENGHT = 2000;

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

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                Intent i = new Intent(MainActivity.this, HomeActivity.class);
                startActivity(i);
                finish();
            }
        }, SPLASH_DISPLAY_LENGHT);
    }
}
  

И не забудьте добавить активность в свой манифест

 <activity android:name="HomeActivity"></activity>