Перейти к содержанию
Fire Monkey от А до Я
  • 0

Поток в Android-е


Иван Р

Вопрос

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

procedure TForm2.Button1Click(Sender: TObject);
begin
  TTask.Run(
    procedure
    begin
      TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
          MediaPlayer1.FileName :=
            'http://cdndl.zaycev.net/228184/8640962/lana_del_rey_-_hope_is_a_dangerous_thing_for_a_woman_like_me_to_have_but_i_have_it_%28zaycev.net%29.mp3?ext.page=default';
          MediaPlayer1.Play;
        end);
    end);
end;

end.

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
46 минут назад, Иван Р сказал:

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

 

Покажите, пожалуйста, код доп.потока....

Ссылка на комментарий
  • 0
1 час назад, Иван Р сказал:

Это весь код больше ничего нет

Тут нет кода, выполняемого в доп.потоке.
Метод Synchronize делает следующее: "приостановить выполнение себя (т.е. доп.потока), переключиться в основной поток, выполнить там действие и после этого вернуться в себя (в доп.поток)".
Ввиду того, что в коде доп.потока есть только synchronize - то единственное, что поток делает - ждёт, пока выполнится его действие в основном потоке.

То есть - является абсолютно бессмысленным.

Ссылка на комментарий
  • 0
1 час назад, Иван Р сказал:

покажите, пожалуйста, правильный пример 

Покажите, пожалуйста, правильную задачу, которую пытаетесь решить.

Ссылка на комментарий
  • 0
1 час назад, kami сказал:

Покажите, пожалуйста, правильную задачу, которую пытаетесь решить.

Задача с помощью стандартного плеера воспроизвести музыку не сохраняя ее на устройстве, то есть онлйн

Ссылка на комментарий
  • 0
12 часов назад, Иван Р сказал:

Задача с помощью стандартного плеера воспроизвести музыку не сохраняя ее на устройстве, то есть онлйн

С помощью стандартного (тот что в палитре компонентов Delphi) это сделать затруднительно. Вам нужно написать свои реализации классов TMedia и TCustomMediaCodec. Это долгий и муторный путь. Но можно забыть про куцую оболочку Эмбаркадеро под названием TMediaPlayer, и все становиться гораздо проще:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  Androidapi.JNI.Media, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FPlayer : JMediaPlayer;
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FPlayer:=TJMediaPlayer.Create;
  FPlayer.setDataSource(StringToJString('http://cdndl.zaycev.net/228184/8640962/lana_del_rey_-_hope_is_a_dangerous_thing_for_a_woman_like_me_to_have_but_i_have_it_%28zaycev.net%29.mp3'));
  FPlayer.prepare;
  FPlayer.Start();
end;

end.

 

Ссылка на комментарий
  • 0
21 час назад, Евгений Корепов сказал:

С помощью стандартного (тот что в палитре компонентов Delphi) это сделать затруднительно. Вам нужно написать свои реализации классов TMedia и TCustomMediaCodec. Это долгий и муторный путь. Но можно забыть про куцую оболочку Эмбаркадеро под названием TMediaPlayer, и все становиться гораздо проще:


unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  Androidapi.JNI.Media, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FPlayer : JMediaPlayer;
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FPlayer:=TJMediaPlayer.Create;
  FPlayer.setDataSource(StringToJString('http://cdndl.zaycev.net/228184/8640962/lana_del_rey_-_hope_is_a_dangerous_thing_for_a_woman_like_me_to_have_but_i_have_it_%28zaycev.net%29.mp3'));
  FPlayer.prepare;
  FPlayer.Start();
end;

end.

 

Спасибо вам за ответы, но с потоком я так и не разобрался.

Вот прикрепляю проект, в котором воспроизведения радио (а в данном случае просто mp3) в потоке.

На win все работает а на Андроиде нет.

https://yadi.sk/d/-o60o4z6hC_DqA

Прикрепить не получилось, загрузил в диск

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...