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

Ingalime

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

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

  • Посещение

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

    5

Сообщения, опубликованные Ingalime

  1. Здравствуйте. Есть приложение созданное в RAD 10.4.2 и успешно работающее. В RAD 11 приложение виснет на заставке. Закомментировала весь код - не помогло. Какие шаги можно дополнительно сделать, чтобы отловить проблему? Спасибо.

  2. После изменения на 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.

     

  3. Здравствуйте. У меня есть код музыкального плеера со службой переднего плана. Сделано в 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;
    //*************

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

  4. Здравствуете. Установила RAD 11. Во время установки указала, чтобы все было установлено для Андроид. Однако SD Manager показывает не верные пути, но и папок таких нет (см. картинку). А вот в RAD 10.4.2 папка CatalogRepository заполнена как надо. Где моя ошибка для RAD11 и как исправить? Спасибо.

    path.jpg

  5. Здравствуйте. Есть приложение опубликованное в маркете (RAD 10.4.2). До недавнего времени можно было добавлять новые версии. Сегодня при попытке добавить новую версию такой отказ:

    Целевой уровень API для вашего приложения – 29. Чтобы обеспечить необходимую производительность и безопасность, целевой уровень API должен быть не ниже 30. Измените целевой уровень API для приложения так, чтобы он стал не ниже 30

    Подскажите, пожалуйста по шагам как повысить этот уровень в уже готовом проекте. 

    Спасибо.

  6. Здравствуйте. Запуталась в документации. Вроде для разработки на телефоне должна быть IOS не ниже 10, а на Маке начиная с кокой версии надо? Может где в документации есть перечень названий? Спасибо.

  7. На андроид 8.1 все отлично. На андроид 7.1 приложение выпадает в черный экран с продолжением играет музыку и чтобы его закрыть надо идти в настроки стстемы и там его можно закрыть.

    Видимо получение фокуса зависит от версии андроид.

  8. В 31.10.2021 в 00:59, Delpher-X сказал:

    в поставке новой Embarcadero RAD 10.4 отсутствует AVD Manager

    У меня он тут, почему в двух папках знает, наверное, только эмбаркадеро. :)

    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

  9. Спасибо, теперь все компилируется. Однако:

    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;

     

  10. Мне кажется, что у меня где-то неправильно расположены объявления, потому что подчеркивает бессмысленные вещи. Сейчас после полной вставки кода стал подчеркивать красным использование другого юнита 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;

     

  11. Что-то никак не получается. При добавлении 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;
    
    //и т.д.

    Где я ошибаюсь? Спасибо.

  12. Здравствуйте. Можно создать файл apk разместить его на хостинге и прямо скачать на телефон и установить. А если создать файл включающий в себя 32 и 64 бит, он имеет расширение aab для магазина. Такой файл можно установить выше описанным способом на любой телефон или только из магазина гугл это возможно?

  13. Подскажите, пожалуйста, как убрать ошибку Undeclared indentifier: 'FAudioManager' на строке:

    res := FAudioManager.requestAudioFocus(AudioFocusRequest);

    И тут хотелоcь бы уточнить, вопрос в коде:

    if  (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then // фокус потерян
            begin    
               // music stop // действия если фокус потерян
               // тут будет обращение к визуальным компонетам. Это не безопасно?
               // или надо тут обернуть в TThread.Queue?
            end;

     

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