Диалог закрытия 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 секунд после его показа?

Solutions Collecting From Web of "Диалог закрытия Android через 5 секунд?"

 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); 

Используйте 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(); 

Это код, ссылайтесь на эту ссылку :

 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.... } }); } } 

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

Поздно, но я думал, что это может быть полезно для тех, кто использует 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() и это приведет к отмене таймера.

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

Затем назовите убрать мет

 alertDialog .dismiss(); 

Я добавил автоматический сброс с оставшимся временем, отображаемым в тексте положительной кнопки, на 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(); } });