Как убрать диалог прогресса из сервиса? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть действие, и оно показывает диалоговое окно прогресса, когда пользователь начинает загрузку. И загрузка с ftp запускается в службе

Я хочу закрыть это диалоговое окно прогресса, когда служба заканчивает загрузку файла

Как уволить его со службы?

Ответы [ 3 ]

0 голосов
/ 18 октября 2019

Это просто

 alertdialog.dismiss();

, просто поместите это внизу кода установки

0 голосов
/ 18 октября 2019

Лучшим подходом было бы использовать LocalBroadcastManager для уведомления Activity от Service.

Шаг 1: Отправка местной трансляции из вашего сервиса

public class MyService extends Service {

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {

      // do your operation here(create worker thread for blocking operations)

      sendLocalBroadCast() //call this method as soon as above operations completes
      return Service.START_NOT_STICKY;
  }
} 

  private void sendLocalBroadCast() {  

  Intent intent = new Intent("MY_SERVICE_NOTIFICATION");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

}

Обратите внимание, что система вызывает onStartCommand (Intent intent, int flags, int startId) в главном потоке вашей службы. Основной поток службы - это тот же поток, в котором выполняются операции пользовательского интерфейса для операций, выполняющихся в том же процессе. Вы всегда должны избегать остановки цикла событий основного потока. При выполнении длительных операций, сетевых вызовов или интенсивного дискового ввода-вывода вы должны запустить новый поток или использовать AsyncTask

Step2: Заставьте свою активность слушатьэта трансляция

    public class MyActivity extends Activity{

         BroadcastReceiver mReceiver = new BroadcastReceiver() {

          @Override
          public void onReceive(Context context, Intent intent) {

           // you can dismiss your progress dialog here. This method will be called when we receive broadcast from service after the service operation is completed

          }
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {

        //register for listening to "MY_SERVICE_NOTIFICATION" event 


          LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
              new IntentFilter("MY_SERVICE_NOTIFICATION"));
        }

        @Override
        protected void onDestroy() {
          super.onDestroy();

       // remove the receiver   
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
        }
    }
0 голосов
/ 18 октября 2019

Создайте интерфейс finishListener, в котором есть метод прослушивания, внедрите его в действие, чтобы делать все, что вы хотите, и передайте его конструктору службы оттуда, вызовите метод прослушивания

...