Как установить некоторую задержку при вызове действия из другого действия?

#android #google-maps #android-activity #gps

#Android #google-карты #android-activity #gps

Вопрос:

У меня есть приложение, в котором я получаю sms, содержащее его местоположение.При получении sms он запускает другое действие и передает это местоположение этому действию, чтобы отобразить его на карте. Перед вызовом второго действия на экране отображается всплывающее уведомление, похожее на уведомление, но почему-то из-за вызова второго действия этот тост не появляется.Мой вопрос в том, как мы можем отложить вызов второго действия из этого действия?

Ответ №1:

Вы можете использовать что-то вроде этого:

  new Handler().postDelayed(new Runnable() {
                      @Override
                      public void run() {

                          Intent i=new Intent(SearxhJobs.this,JobsTypes.class);
                          startActivity(i);
                      }
                  }, 5000);
 

Здесь он ожидает до 5 секунд, чтобы запустить действие.

Надеюсь, это поможет

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

1. Еще лучше, в наши дни, сделать runnable лямбда.

Ответ №2:

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

     Handler h = new Handler(){
        @Override
        public void handleMessage(Message msg) {

            Intent i = new Intent().setClass(ctx, MainActivity.class);                  
            startActivity(i);
        }           
    };

    h.sendEmptyMessageDelayed(0, 1500); // 1500 is time in miliseconds
 

Ответ №3:

Создайте AsyncClass, который выполняет Thread.sleep() в методе doInBackground(), затем перейдите к своему новому действию в вашем методе onPostExecute().

Вызовите всплывающее сообщение, а затем выполните AsyncClass.

Ответ №4:

Для Kotlin

  Handler().postDelayed({
            val i = Intent(this, MainActivity::class.java)
            startActivity(i)
        }, 5000)
 

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

1. чтобы сделать его коротким Handler().postDelayed({ startActivity(Intent(this, MainActivity::class.java)) }, 3000)

Ответ №5:

Попробуйте:

 Runnable r = new Runnable() {
        @Override
        public void run() {
           // if you are redirecting from a fragment then use getActivity() as the context.
          startActivity(new Intent(SplashActivity.this, MainActivity.class));
          // To close the CurrentActitity, r.g. SpalshActivity
          finish();
       }
};

Handler h = new Handler();
// The Runnable will be executed after the given delay time
h.postDelayed(r, 1500); // will be delayed for 1.5 seconds
 

Ответ №6:

Просто установите макет!

  new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            setContentView(R.layout.next); //where <next> is you target activity :)

            }
        }, 5000);
 

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

1. Плохое решение. Через 5 секунд действие может больше не существовать или оно может быть воссоздано. Например, из-за изменения ориентации.

Ответ №7:

Примером может быть следующее:

 Handler TimeDelay=new Handler();
                if(previous=="geofence"){



                    tts.speak(previous,TextToSpeech.QUEUE_ADD,null, null);
                    Runnable r = new Runnable() {
                        @Override
                        public void run() {
                            /*
                            Intent intent = new Intent(
                                    MyBroadcastMessageReceiver.class.getName());
                            intent.putExtra("some additional data", choice);
                            someActivity.sendBroadcast(intent);*/
                            tts.speak(previous,TextToSpeech.QUEUE_ADD,null, null);
                        }
                    };
                    TimeDelay.postDelayed(r, 150000);