Позвоните Android IntentService из плагина Flutter - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть простой Android IntentService:

public class MyService extends IntentService
{
  public static final int STATUS_RUNNING = 0;
  public static final int STATUS_FINISHED = 1;
  public static final int STATUS_ERROR = 2;


  ....
 @Override
 protected void onHandleIntent(@NonNull Intent intent)
 {
   /*Some operations, report progress*/
   final ResultReceiver receiver = intent.getParcelableExtra("receiver");
   Bundle bundle = new Bundle();

   do
   {
     /*some operations, calculate progress*/
     bundle.putInt("progress", (int) progress);
     receiver.send(STATUS_PROGRESS, bundle);
   }
   while(condition);
 }

}

Получатель:

public class MyServiceReceiver extends ResultReceiver
{
    private Receiver mReceiver;

    public MyServiceReceiver(Handler handler)
    {
        super(handler);
    }

    public void setReceiver(Receiver receiver)
    {
        mReceiver = receiver;
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData)
    {
        if (mReceiver != null)
        {
            mReceiver.onMyServicesReceiveResult(resultCode, resultData);
        }
    }

    public interface Receiver
    {
        void onMyServicesReceiveResult(int resultCode, Bundle resultData);
    }
}

Чтобы позвонить в службу и получить прогресс, мне нужно запустить службу через Intent и реализовать Receiver

@Override
    public void onMyServiceReceiveResult(int resultCode, Bundle resultData)
    {
        switch (resultCode)
         case MyService.STATUS_PROGRESS:
             int progress = resultData.getInt("progress");
             String details = resultData.getString("details");
             /*Update ui*/
             ......
    }

Теперь я хочу инкапсулировать свой сервис как плагин Flutter. Я полагаю, что могу запустить сервис через метод вызова канала, но как сообщить о прогрессе Flutter gui? Я думаю, мне нужен какой-то обратный вызов / поток для обновления состояния во время работы службы?

Могу ли я получить какой-либо совет, как это сделать?

...