Подтвердить что ты не робот

Диалог закрытия Android через 5 секунд?

Я работаю над приложением для доступа. Когда пользователь хочет покинуть приложение, я показываю диалог, в котором он должен подтвердить, что хочет уйти, если он не подтвердит через 5 секунд, диалог должен закрыться автоматически (так как пользователь, вероятно, случайно открыл его). Это похоже на то, что происходит в Windows при изменении разрешения экрана (появляется предупреждение и если вы его не подтверждаете, оно возвращается к предыдущей конфигурации).

Вот как я показываю диалог:

AlertDialog.Builder dialog = new AlertDialog.Builder(this).setTitle("Leaving launcher").setMessage("Are you sure you want to leave the launcher?");
            dialog.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    exitLauncher();
                }
            });
            dialog.create().show();

Как закрыть диалоговое окно через 5 секунд после его показа?

4b9b3361

Ответ 1

final AlertDialog.Builder dialog = new AlertDialog.Builder(this).setTitle("Leaving launcher").setMessage("Are you sure you want to leave the launcher?");
dialog.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int whichButton) {
        exitLauncher();
    }
});     
final AlertDialog alert = dialog.create();
alert.show();

// Hide after some seconds
final Handler handler  = new Handler();
final Runnable runnable = new Runnable() {
    @Override
    public void run() {
        if (alert.isShowing()) {
            alert.dismiss();
        }
    }
};

alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
        handler.removeCallbacks(runnable);
    }
});

handler.postDelayed(runnable, 10000);

Ответ 2

Используйте CountDownTimer для достижения.

      final AlertDialog.Builder dialog = new AlertDialog.Builder(this)
            .setTitle("Leaving launcher").setMessage(
                    "Are you sure you want to leave the launcher?");
       dialog.setPositiveButton("Confirm",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                     exitLauncher();

                }
            });
    final AlertDialog alert = dialog.create();
    alert.show();

    new CountDownTimer(5000, 1000) {

        @Override
        public void onTick(long millisUntilFinished) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFinish() {
            // TODO Auto-generated method stub

            alert.dismiss();
        }
    }.start();

Ответ 3

Это код, ссылка :

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // get button
        Button btnShow = (Button)findViewById(R.id.showdialog);
        btnShow.setOnClickListener(new View.OnClickListener() {
            //on click listener
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                builder.setTitle("How to close alertdialog programmatically");
                builder.setMessage("5 second dialog will close automatically");
                builder.setCancelable(true);

                final AlertDialog closedialog= builder.create();

                closedialog.show();

                final Timer timer2 = new Timer();
                timer2.schedule(new TimerTask() {
                    public void run() {
                        closedialog.dismiss(); 
                        timer2.cancel(); //this will cancel the timer of the system
                    }
                }, 5000); // the timer will count 5 seconds....

            }
        });
    }
}

СЧАСТЛИВЫЙ КОДИРОВАНИЕ!

Ответ 4

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

RxJava поставляется с оператором с именем .timer(), который создаст Observable, который будет запускать onNext() только один раз после заданной продолжительности времени, а затем вызывает onComplete(). Это очень полезно и позволяет избежать создания обработчика или Runnable.

Более подробную информацию об этом операторе можно найти в Документация ReactiveX

// Wait afterDelay milliseconds before triggering call
Subscription subscription = Observable
        .timer(5000, TimeUnit.MILLISECONDS) // 5000ms = 5s
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                // Remove your AlertDialog here
            }
        });

Вы можете отменить действие, вызванное таймером, путем отмены подписки на наблюдаемый при нажатии кнопки. Поэтому, если пользователь вручную закрывает предупреждение, вызовите subscription.unsubscribe() и он имеет эффект отмены таймера.

Ответ 5

AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();

затем вызовите функцию "Сбросить работу"

alertDialog .dismiss(); 

Ответ 6

Я добавил автоматический увольнение с оставшимся временем, отображаемым в тексте положительной кнопки, на AlertDialog.

AlertDialog dialog = new AlertDialog.Builder(getContext())
        .setTitle(R.string.display_locked_title)
        .setMessage(R.string.display_locked_message)
        .setPositiveButton(R.string.button_dismiss, null)
        .create();

dialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {
        final Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
        final CharSequence positiveButtonText = positiveButton.getText();
        new CountDownTimer(AUTO_DISMISS_MILLIS, 100) {
            @Override
            public void onTick(long millisUntilFinished) {
                positiveButton.setText(String.format(Locale.getDefault(), "%s (%d)",
                        positiveButtonText,
                        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) + 1));
            }

            @Override
            public void onFinish() {
                dismiss();
            }
        }.start();

    }
});