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

Ingalime

Пользователи
  • Постов

    354
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Весь контент Ingalime

  1. Спасибо. Буду пробовать. У меня приложение не падает, а просто висит на заставке. Вижу заставку и всё.
  2. Попытка использовать logcat не помогла. На висящей заставке приложения - сыпется сообщения и среди них нет --------- beginning of как показано здесь: https://fire-monkey.ru/topic/55-средства-логирования-в-firemonkey/
  3. Ничего не помогает висит в RAD 11 на заставке. И что ему надо, не понятно...
  4. Здравствуйте. Есть приложение созданное в RAD 10.4.2 и успешно работающее. В RAD 11 приложение виснет на заставке. Закомментировала весь код - не помогло. Какие шаги можно дополнительно сделать, чтобы отловить проблему? Спасибо.
  5. Нет, не соображу как этот код для службы модифицировать под обычный музыкальный плеер.
  6. А можно ли, в качестве решения, добавить в проект Androidapi.JNI.Support из RAD 10.4.2. Или так делать нельзя?
  7. После изменения на TJapp_NotificationCompat_Builder ошибка ушла. Источник: https://stackoverflow.com/questions/69811459/how-do-i-use-the-new-interface-function-names-in-delphi-11s-androidapi-jni-supp Однако теперь приложение просто показывает заставку и не запускается. Висит на заставке. Код службы переднего плана теперь такой. Извините за код это солянка собранная в интернете и она без проблем работает в RAD 10.4 на всех версиях андроида, а вот в RAD 11 что упущено мною или не правильно вставила код. Может подскажите... unit Unit1; interface uses System.SysUtils, System.Classes, System.Android.Service, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Os, Androidapi.JNI.App, Androidapi.JNI.Support, Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNIBridge, Androidapi.Jni, System.Notification; type TDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private { Private declarations } public { Public declarations } end; var DM: TDM; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var //Android 8.1, 9 ... ServiceChannel: JNotificationChannel; NotificationManager: JNotificationManager; Obj: JObject; NewIntent: JIntent; ////ncb: JNotificationCompat_Builder; {$if COMPILERVERSION > 34} ncb: Japp_NotificationCompat_Builder; {$else} ncb: JNotificationCompat_Builder; {$endif} ntf: JNotification; PendingIntent: JPendingIntent; //Android 7.1 service : JService; serviceObjectId : Pointer; ntf2 : JNotification; intent2 : JIntent; PendingIntent2 : JPendingIntent; begin Result := TJService.JavaClass.START_NOT_STICKY; // can't ref .O on earlier phones, must hardcode if TJBuild_VERSION.JavaClass.SDK_INT > 26 then // JBuild_VERSION_CODES.JavaClass.O begin //Android 8.1 //new ways for SDK > 26 (won't be called when API < 26 anyways) try ServiceChannel := TJNotificationChannel.JavaClass.init( StringtoJString('com.radio.one'), //CHANNEL_ID StrToJCharSequence('Public radio Channel'), TJNotificationManager.JavaClass.IMPORTANCE_DEFAULT ); Obj := TAndroidHelper.Context.getSystemService( TJContext.JavaClass.NOTIFICATION_SERVICE); NotificationManager := TJNotificationManager.Wrap(Obj); NotificationManager.createNotificationChannel(ServiceChannel); NewIntent:= TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage( TAndroidHelper.Context.getPackageName()); NewIntent.setAction(TJIntent.JavaClass.ACTION_MAIN); NewIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER); NewIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); PendingIntent := TJPendingIntent.JavaClass.getActivity( TAndroidHelper.Context, 0, NewIntent, TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK ); (* ncb := TJNotificationCompat_Builder.JavaClass.init( TAndroidHelper.Context, StringToJString('com.radio.one') *) {$if COMPILERVERSION > 34} ncb := TJapp_NotificationCompat_Builder.JavaClass.init( TAndroidHelper.Context, StringToJString('com.radio.one') ); {$else} ncb := TJNotificationCompat_Builder.JavaClass.init( TAndroidHelper.Context, StringToJString('com.radio.one') ); {$endif} ncb.setContentTitle(StrToJCharSequence('PublicRadio Service')); // ncb.setTicker(StrToJCharSequence('MyCommsService')); // can't remember why this is commented out to be honest ncb.setSmallIcon(JavaService.getApplicationInfo.icon); ncb.setContentIntent(PendingIntent); ncb.setOngoing(True); ntf := ncb.build; JavaService.startForeground(StartId, ntf); except exit; end; end else begin //Android 7.1 try serviceObjectId := (JavaService as ILocalObject).GetObjectID; service := TJService.Wrap(serviceObjectId); /////ntf2 := TJNotification.Create; ////ntf2.icon := service.getApplicationInfo.icon; NewIntent:= TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage( TAndroidHelper.Context.getPackageName()); NewIntent.setAction(TJIntent.JavaClass.ACTION_MAIN); NewIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER); NewIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); PendingIntent2 := TJPendingIntent.JavaClass.getActivity( TAndroidHelper.Context, 0, NewIntent, TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK ); (* ncb := TJNotificationCompat_Builder.JavaClass.init( TAndroidHelper.Context, StringToJString('com.radio.one') *) {$if COMPILERVERSION > 34} ncb := TJapp_NotificationCompat_Builder.JavaClass.init( TAndroidHelper.Context, StringToJString('com.radio.one') ); {$else} ncb := TJNotificationCompat_Builder.JavaClass.init( TAndroidHelper.Context, StringToJString('com.radio.one') ); {$endif} //intent2 := TJIntent.Create; //PendingIntent2 := TJPendingIntent.JavaClass.getActivity(service.getApplicationContext, 0, intent2, 0); ncb.setContentTitle(StrToJCharSequence('PublicRadio')); // ncb.setTicker(StrToJCharSequence('MyCommsService')); ncb.setSmallIcon(JavaService.getApplicationInfo.icon); ncb.setContentIntent(PendingIntent2); ncb.setOngoing(True); ntf2 := ncb.build; ntf2.setLatestEventInfo(service.getApplicationContext, StrToJCharSequence('PublicRadio'), StrToJCharSequence('PublicRadio Service'), PendingIntent2); service.startForeground(StartId, ntf2); except exit; end; end; end; end.
  8. Ingalime

    RAD 11 и Android

    Помогло переустановка студии. Со второго раза все установилось в полном объеме.
  9. Ingalime

    [Android]Undeclared identifier

    Здравствуйте. У меня есть код музыкального плеера со службой переднего плана. Сделано в RAD 10.4.2 и все работает. При попытке откомпилировать код в RAD 11 получаю ошибку: [DCC Error] Unit1.pas(50): E2003 Undeclared identifier: 'JNotificationCompat_Builder' function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var //Android 8.1, 9 ServiceChannel: JNotificationChannel; NotificationManager: JNotificationManager; Obj: JObject; NewIntent: JIntent; ncb: JNotificationCompat_Builder;//тут ошибка ntf: JNotification; PendingIntent: JPendingIntent; //************* Подскажите, пожалуйста, как исправить.
  10. Ingalime

    RAD 11 и Android

    Студия ставилась с интернетом. Видно было как андроид скачивается. А где правильное скачать sdk 30 андроид? Спасибо.
  11. Ingalime

    RAD 11 и Android

    Здравствуете. Установила RAD 11. Во время установки указала, чтобы все было установлено для Андроид. Однако SD Manager показывает не верные пути, но и папок таких нет (см. картинку). А вот в RAD 10.4.2 папка CatalogRepository заполнена как надо. Где моя ошибка для RAD11 и как исправить? Спасибо.
  12. Нашла что в Александрии этот вопрос вроде решен. Во что нового есть такое: Support to target Android API 30 (a Google Play Store requirement for 2021)
  13. Ingalime

    Целевой уровень API

    Здравствуйте. Есть приложение опубликованное в маркете (RAD 10.4.2). До недавнего времени можно было добавлять новые версии. Сегодня при попытке добавить новую версию такой отказ: Целевой уровень API для вашего приложения – 29. Чтобы обеспечить необходимую производительность и безопасность, целевой уровень API должен быть не ниже 30. Измените целевой уровень API для приложения так, чтобы он стал не ниже 30 Подскажите, пожалуйста по шагам как повысить этот уровень в уже готовом проекте. Спасибо.
  14. Ingalime

    Версии для разработки

    Здравствуйте. Запуталась в документации. Вроде для разработки на телефоне должна быть IOS не ниже 10, а на Маке начиная с кокой версии надо? Может где в документации есть перечень названий? Спасибо.
  15. На андроид 8.1 все отлично. На андроид 7.1 приложение выпадает в черный экран с продолжением играет музыку и чтобы его закрыть надо идти в настроки стстемы и там его можно закрыть. Видимо получение фокуса зависит от версии андроид.
  16. Спасибо все работает
  17. У меня он тут, почему в двух папках знает, наверное, только эмбаркадеро. C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203 C:\Users\Public\Documents\Embarcadero\Studio\21.0\CatalogRepository\AndroidSDK-2525-21.0.40680.4203\tools\lib
  18. Спасибо буду пробовать. p.s. Болезни закончились, снова за работу. :)
  19. Спасибо, теперь все компилируется. Однако: else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then begin //фокус получен //LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED'); ShowMessage('AUDIOFOCUS_REQUEST_GRANTED'); end else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_FAILED then // отказано //LogCAAdd('AUDIOFOCUS_REQUEST_FAILED'); ShowMessage('AUDIOFOCUS_REQUEST_FAILED'); end Вижу при нажатии на кнопку проигрывания сообщение AUDIOFOCUS_REQUEST_GRANTED Все нормально. Делаю звонок и поднимаю трубку. Музыку все равно слышно. Что-то мною упущено... if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then // фокус потерян begin // music stop // действия если фокус потерян //код кнопки STOP OverflowMenu.Visible := False; Text1.Text := ''; FloatAnimation1.Enabled := False; Viewport3D1.Visible := False; AniIndicator1.Enabled := FALSE; AniIndicator1.Visible := FALSE; BASS_ChannelStop(str); BASS_StreamFree(str); ShowMessage('STOP OK');//тест - не вижу когда возвращаюсь в приложение положив трубку end;
  20. Мне кажется, что у меня где-то неправильно расположены объявления, потому что подчеркивает бессмысленные вещи. Сейчас после полной вставки кода стал подчеркивать красным использование другого юнита uses UnitDonate; в Structure пишет (E2029 Declaration expected but 'USES' found at line 188 (188:1)) и дальше по коду подчеркивает во всех функциях конструкцию со скобкой end); Если вы не видите ошибку, то можно ваш pas файл выложить с кодом только аудиофокуса? Попробую сравнить что у меня не так. Спасибо. unit UnitMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation, bass, FMX.Objects, FMX.Layouts, FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.App, Androidapi.JNI.Net, System.Math.Vectors, FMX.Ani, FMX.MaterialSources, FMX.Controls3D, FMX.Objects3D, FMX.Viewport3D, System.Net.HttpClient.Android, System.Net.HttpClient, System.Actions, FMX.ActnList, FMX.StdActns, FMX.MediaLibrary.Actions, System.Threading, FMX.Effects, FMX.ListBox, System.Android.Service, FMX.Platform.Android, System.Notification, FMX.Platform, FMX.PhoneDialer, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, AndroidApi.JNI.Media, Androidapi.JNI.Os; type TMyAudioFocusChangeListener = class; // Создаем класс прослушивания фокуса аудио TForm1 = class(TForm) StyleBook1: TStyleBook; ToolBar1: TToolBar; ToolBar2: TToolBar; Button1: TButton; Button2: TButton; Layout1: TLayout; TrackBar1: TTrackBar; Layout2: TLayout; Layout3: TLayout; Label1: TLabel; Image1: TImage; Rectangle1: TRectangle; Rectangle2: TRectangle; Label2: TLabel; Viewport3D1: TViewport3D; Sphere1: TSphere; TextureMaterialSource1: TTextureMaterialSource; FloatAnimation1: TFloatAnimation; Image2: TImage; Text1: TText; OverflowButton: TButton; ActionList1: TActionList; ShowShareSheetAction1: TShowShareSheetAction; Layout4: TLayout; ProgressBar1: TProgressBar; Label3: TLabel; OverflowMenu: TListBox; ListBoxItem1: TListBoxItem; ListBoxItem2: TListBoxItem; ListBoxItem3: TListBoxItem; ShadowEffect1: TShadowEffect; AniIndicator1: TAniIndicator; Button3: TButton; Image3: TImage; ListBoxItem4: TListBoxItem; NotificationCenter1: TNotificationCenter; Label4: TLabel; Layout5: TLayout; procedure Label1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ListBoxItem1Click(Sender: TObject); procedure ListBoxItem2Click(Sender: TObject); procedure ListBoxItem3Click(Sender: TObject); procedure OverflowButtonClick(Sender: TObject); procedure Image3Click(Sender: TObject); procedure ListBoxItem4Click(Sender: TObject); procedure Label4Click(Sender: TObject); private { Private declarations } FService: TLocalServiceConnection; //PhoneDialerService: IFMXPhoneDialerService; //call //procedure MyOnCallStateChanged(const ACallID: String; const ACallState: TCallState); afChangeListener: TMyAudioFocusChangeListener; //Создаем переменную прослушивания фокуса аудио public { Public declarations } //constructor Create(AOwner: TComponent); override; //call 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; FAudioService: JObject; FAudioManager: JAudioManager; smp: HSAMPLE; str: HSTREAM; MyNotification: TNotification; 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; //****************** {$R *.fmx} uses UnitDonate; //красным подчеркивает //******************************* procedure TForm1.FormCreate(Sender: TObject); Begin if not BASS_Init(-1, 44100, 0, nil, nil) Then Begin ShowMessage('Failed to initialize audio!' + sLineBreak + 'Не удалось инициализировать audio!'); Exit; end; try if FService = Nil Then Begin FService := TLocalServiceConnection.Create; FService.StartService('serPublic'); end; except Exit; begin {$IFDEF ANDROID} if FAudioService=nil then begin FAudioService:= TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); if FAudioService <> nil then begin FAudioManager := TJAudioManager.Wrap((FAudioService as ILocalObject).GetObjectID); end; end; {$ENDIF} end; end;
  21. А какие файлы скинуть? Проект большой. Содержит файлы SO, библиотеки BASS, картинки. Все работает, только осталось входящий звонок реализовать.
  22. Что-то никак не получается. При добавлении FAudioManager: JAudioManager; получаю Declaration expected but 'USES' found at line unit UnitMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation, bass, FMX.Objects, FMX.Layouts, FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.App, Androidapi.JNI.Net, System.Math.Vectors, FMX.Ani, FMX.MaterialSources, FMX.Controls3D, FMX.Objects3D, FMX.Viewport3D, System.Net.HttpClient.Android, System.Net.HttpClient, System.Actions, FMX.ActnList, FMX.StdActns, FMX.MediaLibrary.Actions, System.Threading, FMX.Effects, FMX.ListBox, System.Android.Service, FMX.Platform.Android, System.Notification, FMX.Platform, FMX.PhoneDialer, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, AndroidApi.JNI.Media, Androidapi.JNI.Os; type TMyAudioFocusChangeListener = class; // Создаем класс прослушивания фокуса аудио TForm1 = class(TForm) StyleBook1: TStyleBook; ToolBar1: TToolBar; ToolBar2: TToolBar; Button1: TButton; Button2: TButton; Layout1: TLayout; TrackBar1: TTrackBar; Layout2: TLayout; Layout3: TLayout; Label1: TLabel; Image1: TImage; Rectangle1: TRectangle; Rectangle2: TRectangle; Label2: TLabel; Viewport3D1: TViewport3D; Sphere1: TSphere; TextureMaterialSource1: TTextureMaterialSource; FloatAnimation1: TFloatAnimation; Image2: TImage; Text1: TText; OverflowButton: TButton; ActionList1: TActionList; ShowShareSheetAction1: TShowShareSheetAction; Layout4: TLayout; ProgressBar1: TProgressBar; Label3: TLabel; OverflowMenu: TListBox; ListBoxItem1: TListBoxItem; ListBoxItem2: TListBoxItem; ListBoxItem3: TListBoxItem; ShadowEffect1: TShadowEffect; AniIndicator1: TAniIndicator; Button3: TButton; Image3: TImage; ListBoxItem4: TListBoxItem; NotificationCenter1: TNotificationCenter; Label4: TLabel; Layout5: TLayout; procedure Label1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ListBoxItem1Click(Sender: TObject); procedure ListBoxItem2Click(Sender: TObject); procedure ListBoxItem3Click(Sender: TObject); procedure OverflowButtonClick(Sender: TObject); procedure Image3Click(Sender: TObject); procedure ListBoxItem4Click(Sender: TObject); procedure Label4Click(Sender: TObject); private { Private declarations } FService: TLocalServiceConnection; afChangeListener: TMyAudioFocusChangeListener; //Создаем переменную прослушивания фокуса аудио public { Public declarations } 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; FAudioManager: JAudioManager; smp: HSAMPLE; str: HSTREAM; MyNotification: TNotification; implementation //***************** constructor TMyAudioFocusChangeListener.Create; // создание класса begin inherited Create; FParent := AParent; end; //и т.д. Где я ошибаюсь? Спасибо.
  23. Здравствуйте. Можно создать файл apk разместить его на хостинге и прямо скачать на телефон и установить. А если создать файл включающий в себя 32 и 64 бит, он имеет расширение aab для магазина. Такой файл можно установить выше описанным способом на любой телефон или только из магазина гугл это возможно?
  24. Подскажите, пожалуйста, пример использования FGX native и push уведомлений. Спасибо.
  25. Подскажите, пожалуйста, как убрать ошибку Undeclared indentifier: 'FAudioManager' на строке: res := FAudioManager.requestAudioFocus(AudioFocusRequest); И тут хотелоcь бы уточнить, вопрос в коде: if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then // фокус потерян begin // music stop // действия если фокус потерян // тут будет обращение к визуальным компонетам. Это не безопасно? // или надо тут обернуть в TThread.Queue? end;
×
×
  • Создать...