Вам не нужно этого делать, вам нужно обрабатывать потерю аудиофокуса. Код корявый лень в порядок приводить...
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;