отправить данные в работающую асин c функцию xamarin - PullRequest
0 голосов
/ 30 марта 2020

Работа с Xamarin Android и C# -

Я хочу иметь функцию загрузки, которая просто загружает следующий элемент (URL) из списка, если первый с индексом 0 завершен. Во время загрузки пользователь должен иметь возможность расширять список (добавлять новые URL для загрузки).

Моя идея заключалась в том, чтобы иметь одну void OnButtonClick() (для ввода пользователя) и одну пользовательскую функцию aysnc void Download(), а также возможность использовать «функцию обмена» (намерение) для прямой отправки ссылки. Это работает, НО только если пользователь не использует «функцию обмена» в другом приложении (см. Здесь: Intent.GetStringExtra). Если приложение открывается через это намерение, загрузка l oop полностью перезаписывается. Есть ли способ избежать этой "ошибки" или другого решения для очереди на скачивание?

protected override void OnCreate() //gets called if activity starts
{
   string catchedLink = Intent.GetStringExtra(Intent.ExtraText);
   if (!String.IsNullOrEmpty(catchedLink))
   {
         button.Text = catchedLink;
   }
}
public OnButtonClick()
{
   urlList.Add(Button.Text);
}

private aysnc void Download()
{
   if(IsDownloading) return;

   IsDownloading = true;
   do
   {
    await DownloadSomethingFromTheInternet(); //Let's say these two function need 2 mins to complete -
    await SafeItToStorage();                  //But after one minute the user adds a secound url for download
                                              //so this loop needs to run again (see below)

    urlList.Remove(urlList[0]);

   } while (urlList.Count >= 1)               //see here
   IsDownloading = false;
}

Пожалуйста, оставьте комментарий, если требуется более подробная информация.

1 Ответ

0 голосов
/ 01 апреля 2020

Хорошо, теперь это работает:

Что я сделал:

  • Сохраните ссылки на устройстве с Preferences.Set();, а не только с помощью списка
  • Добавлен LaunchMode = Android.Content.PM.LaunchMode.SingleTask к AndroidMainfest.xml (in <activity [...] />)
  • Используется для ввода намеренного кода:
protected override void OnNewIntent(Intent myIntent)
        {
            base.OnNewIntent(myIntent);
            string catchedLink = myIntent.GetStringExtra(Intent.ExtraText);
            if (!String.IsNullOrEmpty(catchedLink))
            {
                AddVideoToQue(catchedLink);
            }
        }```

Thanks @Leo Zhu - MSFT for his comments and help!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...