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

OnePeople

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

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

  • Посещение

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

    57

Активность репутации

  1. Like
    OnePeople получил реакцию от Ingalime в Android: сканирование и подключение к WiFi   
    Вы можете его даже не создавать
    TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI
  2. Thanks
    OnePeople получил реакцию от Ingalime в [Android]Входящий звонок   
    if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) or (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS_TRANSIENT)  
  3. Like
    OnePeople получил реакцию от Yarpda в Как добавить в приложение проверку наличия соединения с Интернетом?   
    ну да, это не мое решение так разделить, написал на скорую для Вас
    function checkNetwork: Boolean; var ConnectivityServiceNative: JObject; cm: JConnectivityManager; activeNetwork: JNetworkInfo; begin try // подключаемся к сервису (в данном случае соединений) ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); // если не подключились то выход c результататом функции FALSE if not Assigned(ConnectivityServiceNative) then exit(false); // получаем менеджер соединений cm := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); // если не получили то выход c результататом функции FALSE if not Assigned(Result) then exit(false); // запрашиваем информацию о активном соединении activeNetwork := cm.getActiveNetworkInfo; // если есть информация и статус соединения подключено то результат функции TRUE Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; except // при любой ошибке выход c результататом функции FALSE Exit(false); end; end;  
  4. Like
    OnePeople получил реакцию от Tumaso в Опять не читает из assets в Android64   
    Где код, как вы получаете S?
    Ну и скрин deployment для Android 64? Прошу заметить что Android чувствителен к регистру File и file это разные папки.
  5. Thanks
    OnePeople получил реакцию от Ingalime в [Android]Входящий звонок   
    Тут вы делаете что хотите, хоть обращаетесь к визуальным компонентам хоть нет, главное чтобы вы остановили воспроизведение!
  6. Thanks
    OnePeople получил реакцию от Ingalime в [Android]Входящий звонок   
    в OnCreate
    {$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}
     
    Общая переменная
    var
    FAudioManager: JAudioManager;
  7. Thanks
    OnePeople получил реакцию от Ingalime в [Android]Входящий звонок   
    Androidapi.JNI.Os;
    Мой лог вам не нужно
     
    Каждый раз когда запускаете проигрывание файла
  8. Like
    OnePeople получил реакцию от Barbanel в Crony Auto (Alpha)   
    Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
    Основные возможности:
    - Просмотр, запуск и удаление приложений
    - Прослушивание аудио с памяти устройства или плейлистов радио онлайн
    - Работа как в режиме воспроизведения с флешки, так и создание плейлистов
    - Просмотр погоды
    - Работа с OBD2 по Bluetooth
    - Виджет яндекс-навигации с указанием пути движения
    - Темы оформления
    Текущая версия: 0.4.0.402
    Ссылка на приложение: 4PDA
  9. Like
    OnePeople получил реакцию от Дмитрий Ш. в Crony Auto (Alpha)   
    Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
    Основные возможности:
    - Просмотр, запуск и удаление приложений
    - Прослушивание аудио с памяти устройства или плейлистов радио онлайн
    - Работа как в режиме воспроизведения с флешки, так и создание плейлистов
    - Просмотр погоды
    - Работа с OBD2 по Bluetooth
    - Виджет яндекс-навигации с указанием пути движения
    - Темы оформления
    Текущая версия: 0.4.0.402
    Ссылка на приложение: 4PDA
  10. Like
    OnePeople получил реакцию от Alialioglu2016 в StatusBar Color   
    А зачем это всё? В style.xml
    <item name="android:windowTranslucentStatus">false</item>
    В OnCreate
    TAndroidHelper.Activity.getWindow.setFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_LAYOUT_NO_LIMITS, TJWindowManager_LayoutParams.JavaClass.FLAG_LAYOUT_NO_LIMITS); TAndroidHelper.Activity.getWindow.getDecorView.setFitsSystemWindows(false); TAndroidHelper.Activity.getWindow.setStatusBarColor($00000000);  
  11. Thanks
    OnePeople получил реакцию от Ingalime в Crony Auto (Alpha)   
    Crony Auto - Лаунчер, целью которого является обеспечение удобства, целостности дизайна и обеспечение достаточного функционала для работы без использования стандартных приложений вашей Android магнитолы.
    Основные возможности:
    - Просмотр, запуск и удаление приложений
    - Прослушивание аудио с памяти устройства или плейлистов радио онлайн
    - Работа как в режиме воспроизведения с флешки, так и создание плейлистов
    - Просмотр погоды
    - Работа с OBD2 по Bluetooth
    - Виджет яндекс-навигации с указанием пути движения
    - Темы оформления
    Текущая версия: 0.4.0.402
    Ссылка на приложение: 4PDA
  12. Like
    OnePeople получил реакцию от Semitako в [Android]Входящий звонок   
    Ну смотрите, вообще любой нормальный плеер когда начинает играть запрашивает фокус себе, чтобы другие приложения приостановили проигрывание, когда происходит звонок приложение телефон также забирает аудио фокус себе, ваше задача отловить этот момент, при внедрении этого кода, ваше приложение будет останавливать проигрывание когда потеряет фокус. Во первых это единственно правильный метод. Во вторых ваше приложение будет останавливать проигрывание и при запуске видео в Ютуб, или входящем звонке с мессенджеров.
  13. Thanks
    OnePeople получил реакцию от Ingalime в [Android]Входящий звонок   
    Ну смотрите, вообще любой нормальный плеер когда начинает играть запрашивает фокус себе, чтобы другие приложения приостановили проигрывание, когда происходит звонок приложение телефон также забирает аудио фокус себе, ваше задача отловить этот момент, при внедрении этого кода, ваше приложение будет останавливать проигрывание когда потеряет фокус. Во первых это единственно правильный метод. Во вторых ваше приложение будет останавливать проигрывание и при запуске видео в Ютуб, или входящем звонке с мессенджеров.
  14. Like
    OnePeople получил реакцию от mazayhin в [Android]Входящий звонок   
    Правильнее через аудио фокус!
  15. Thanks
    OnePeople получил реакцию от Semitako в [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;  
  16. Like
    OnePeople отреагировална slav_z в Canvas GPU Alpha+Opacity   
    для GPU (Android и iOS) неверно работает установка цвета при следующих условиях: Rectangle.Fill.Color:=$3CF865F7 и Rectangle.Opacity=0.5 (одновременно установить цвет элемента с альфа-каналом < $FF и прозрачностью элемента < 1).
    Это может понадобиться, к примеру, для анимации "исчезающего" элемента. Ошибке много лет... исправляется внесением изменений в исходный код модуля FMX.Canvas.GPU.pas (необходимо скопировать модуль FMX.Canvas.GPU.pas к себе в проект и внести изменения ).
    Оригинальный код:

    Исправленный код:

  17. Like
    OnePeople отреагировална krapotkin в Delphi 10.4.2 и ComboBox   
    эмм
    вот вполне рабочий вариант
    procedure TForm1.b1Click(Sender: TObject); var   item: tlistboxitem;   i: integer; begin   for i := 1 to 2 do   begin     item := tlistboxitem.Create(nil);     item.Text := inttostr(i);     cbb1.ListBox.AddObject(item);   end; end; procedure TForm1.b2Click(Sender: TObject); var   item: tlistboxitem;   i: integer; begin   for i := 3 to 4 do   begin     item := tlistboxitem.Create(nil);     item.Text := inttostr(i);     cbb1.ListBox.AddObject(item);   end; end;  
  18. Thanks
    OnePeople получил реакцию от Alexandr в [Android] Воспроизводить аудио   
    Audiofocus отлавливать, пример могу через пару часиков скинуть, а лучше сами в справке Гугла посмотрите
  19. Thanks
    OnePeople получил реакцию от Alexandr в [Android] Воспроизводить аудио   
    По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.
    Выдернул из рабочего проекта, строго не пинать, за корявость)
    1.
    type       {$IFDEF ANDROID}   TMyAudioFocusChangeListener = class;         {$ENDIF}   TForm1 = class(TForm) 2.
    private     { Private declarations }            {$IFDEF ANDROID}     afChangeListener: TMyAudioFocusChangeListener; 3.
    public 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; 4.
    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   Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString);    if  (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then         begin           MusicControl.AudioFocus:=false;           case MusicControl.MusicType of           TMusicType.Music:           if MusicControl.Music.MusicState=TMusicState.Play then               begin                  MusicPlayPause;                  exit;               end;           TMusicType.Radio:           if MusicControl.Radio.MusicState=TMusicState.Play then               begin                  RadioPlayPause;                  exit;               end;         end;         end; end; 5.
    procedure TForm1.GetAudioFocus; begin //   {$IFDEF ANDROID} 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         LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED')      else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then      begin         MusicControl.AudioFocus:=true;         LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED');      end      else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then         LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED');      end     );       {$ENDIF} end; P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать
  20. Thanks
    OnePeople получил реакцию от Alexandr в [Android] Воспроизводить аудио   
    Ошибку чего??? Вы создаете процедуру, с именем каким вы хотите, как это может быть ошибкой, проверяйте синтаксис
  21. Like
    OnePeople получил реакцию от Ingalime в [Android] Воспроизводить аудио   
    По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.
    Выдернул из рабочего проекта, строго не пинать, за корявость)
    1.
    type       {$IFDEF ANDROID}   TMyAudioFocusChangeListener = class;         {$ENDIF}   TForm1 = class(TForm) 2.
    private     { Private declarations }            {$IFDEF ANDROID}     afChangeListener: TMyAudioFocusChangeListener; 3.
    public 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; 4.
    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   Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString);    if  (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then         begin           MusicControl.AudioFocus:=false;           case MusicControl.MusicType of           TMusicType.Music:           if MusicControl.Music.MusicState=TMusicState.Play then               begin                  MusicPlayPause;                  exit;               end;           TMusicType.Radio:           if MusicControl.Radio.MusicState=TMusicState.Play then               begin                  RadioPlayPause;                  exit;               end;         end;         end; end; 5.
    procedure TForm1.GetAudioFocus; begin //   {$IFDEF ANDROID} 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         LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED')      else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then      begin         MusicControl.AudioFocus:=true;         LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED');      end      else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then         LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED');      end     );       {$ENDIF} end; P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать
  22. Like
    OnePeople получил реакцию от Ingalime в ListViewItem - Изменение цвета фона зависимости от данных в Dataset   
    Align и vertAlign ====== center  ????
  23. Like
    OnePeople получил реакцию от Ingalime в Права на запись   
    Если в манифесте есть     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    то все должно работать!
    Context.getExternalFilesDir(String) и Context.getExternalCacheDir() в эти каталоги должно и без разршения записывать если API 19 или выше!
  24. Like
    OnePeople получил реакцию от Ingalime в Скопировать файл из root директории   
    У всех, кто запросил разрешение на это;)
  25. Thanks
    OnePeople получил реакцию от Ingalime в [Android] Воспроизводить аудио   
    Последний параметр ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
    И этот флаг должен совпадать с манифестом
×
×
  • Создать...