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

Лидеры

Популярный контент

Показан контент с высокой репутацией 11.08.2021 во всех областях

  1. OnePeople

    [Android]Входящий звонок

    Вам не нужно этого делать, вам нужно обрабатывать потерю аудиофокуса. Код корявый лень в порядок приводить... type TMyAudioFocusChangeListener = class; // Создаем класс прослушивания фокуса аудио TForm1 = class(TForm) ... private { Private declarations } afChangeListener: TMyAudioFocusChangeListener; Создаем переменную прослушивания фокуса аудио ... public procedure GetAudioFocus; procedure onAudioFocusChange(focusChange: Integer); end; TAudioFocusChangeEvent = procedure(focusChange: Integer) of object; // описания события изменения фокуса TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener) // описание класса прослушивания фокуса аудио private [weak] FParent : TForm1; FOnAudioFocusChanged: TAudioFocusChangeEvent; public constructor Create(AParent : TForm1); property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged write FOnAudioFocusChanged; Destructor Destroy; Override; procedure onAudioFocusChange(focusChange: Integer); cdecl; end; var Form1: TForm1; AuFocus: JAudioManager_OnAudioFocusChangeListener; JAudioManagerListener: TMyAudioFocusChangeListener; implementation constructor TMyAudioFocusChangeListener.Create; // создание класса begin inherited Create; FParent := AParent; end; destructor TMyAudioFocusChangeListener.Destroy; // уничтожение класса begin inherited; end; procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer); // событие изменения фокуса begin if Assigned(FOnAudioFocusChanged) then begin FOnAudioFocusChanged(focusChange); // передача события изменения фокуса end; FParent.onAudioFocusChange(focusChange); // вызов процедуры изменения фокуса формы end; procedure TForm1.onAudioFocusChange(focusChange: Integer); //процедура изменения фокуса формы begin if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then // фокус потерян begin // music stop // действия если фокус потерян end; end; procedure TForm1.GetAudioFocus; // получаем фокус для своего приложения begin CallinUIThread(procedure var AudioFocusRequest: JAudioFocusRequest; playbackAttributes: JAudioAttributes; afHandler: JHandler; res: integer; begin afChangeListener := TMyAudioFocusChangeListener.Create(Self); // создаем класс прослушивания аудио фокуса для своего приложения afHandler := TJHandler.Create; // создаем указатель своего приложения playbackAttributes := TJAudioAttributes_Builder.Create // создаем параметры прослушивания аудио фокуса .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA) .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC) .build(); AudioFocusRequest := TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create // создаем запрос с параметрами прослушивания аудио фокуса .setAudioAttributes(playbackAttributes) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener(afChangeListener, afHandler) .build(); res := FAudioManager.requestAudioFocus(AudioFocusRequest); // непосредственно запрашиваем фокус if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then // отказано else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then begin //фокус получен LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED'); end else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_FAILED then // отказано LogCAAdd('AUDIOFOCUS_REQUEST_FAILED'); end ); end;
    1 балл
  2. onPaint вызывается не когда вы хотите, а когда система считает нужным а чтоб она посчитала нужным, вызывайте Invalidate.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...