Таймер обратного отсчета в окне оповещения в Android

Как отобразить таймер обратного отсчета в моем окне оповещения. Я хочу уведомить пользователя о том, что сеанс закончится через 5 минут, и показать таймер во всплывающем окне оповещения в Android


person saravanan    schedule 28.05.2012    source источник


Ответы (2)


Создайте пользовательский диалог с TextView на нем.

и обновите этот код с помощью класса CountDownTimer следующим образом.

new CountDownTimer(300000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

вы можете закрыть свой диалог в onFinish().

для более подробной информации вы можете перейти по этой ссылке

person Akram    schedule 28.05.2012
comment
@saravanan да, используйте для этого собственный диалог - person Akram; 28.05.2012
comment
его объект окна предупреждения в object.setMessage (оставшиеся секунды: + millisUntilFinished / 1000); это правильно или нет подскажите пожалуйста - person saravanan; 28.05.2012
comment
я не думаю, что это правильно, я бы предложил вам использовать настраиваемое диалоговое окно - person Akram; 28.05.2012
comment
@saravanan перейдите по этой ссылке для пользовательского диалога developer.android.com/guide/ topics/ui/dialogs.html#CustomDialog - person Akram; 28.05.2012

Следующий код создает приглашение, как вы описали. Он добавляет таймер обратного отсчета к кнопке действия по умолчанию.

скриншот диалога с обратным отсчетом Класс прослушивателя диалогов

private static class DialogTimeoutListener
        implements DialogInterface.OnShowListener, DialogInterface.OnDismissListener {
    private static final int AUTO_DISMISS_MILLIS = 5 * 60 * 1000;
    private CountDownTimer mCountDownTimer;

    @Override
    public void onShow(final DialogInterface dialog) {
        final Button defaultButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_NEGATIVE);
        final CharSequence positiveButtonText = defaultButton.getText();
        mCountDownTimer = new CountDownTimer(AUTO_DISMISS_MILLIS, 100) {
            @Override
            public void onTick(long millisUntilFinished) {
                if (millisUntilFinished > 60000) {
                    defaultButton.setText(String.format(
                            Locale.getDefault(), "%s (%d:%02d)",
                            positiveButtonText,
                            TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
                            TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished % 60000)
                    ));
                } else {
                    defaultButton.setText(String.format(
                            Locale.getDefault(), "%s (%d)",
                            positiveButtonText,
                            TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) + 1 //add one so it never displays zero
                    ));
                }
            }

            @Override
            public void onFinish() {
                if (((AlertDialog) dialog).isShowing()) {
                    // TODO: call your logout method
                    dialog.dismiss();
                }
            }
        };
        mCountDownTimer.start();
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        mCountDownTimer.cancel();
    }

Диалоговое окно оповещения

AlertDialog dialog = new AlertDialog.Builder(this)
        .setTitle("Session Timeout")
        .setMessage("Due to inactivity, you will soon be logged out.")
        .setPositiveButton("Extend Session", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO: call your log out method
            }
        })
        .setNegativeButton("Log Out Now", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO: call method to extend session
            }
        })
        .create();
DialogTimeoutListener listener = new DialogTimeoutListener();
dialog.setOnShowListener(listener);
dialog.setOnDismissListener(listener);
dialog.show();
person Jon    schedule 05.07.2017