#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. Один из приведенных ниже ответов наверняка сработает. Просто хотел отметить, что вам нужно включить функцию 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>