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

Ingalime

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

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

  • Посещение

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

    5

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

  1. Thanks
    Ingalime отреагировална mazayhin в [Android]Входящий звонок   
    Думаю, что правильнее и проще всего будет добавить в приложение ресивер, и подписаться на событие входящего вызова, ну, и далее, скажем, в сервис интент отправить, или в приложение, или еще что сделать
  2. Thanks
    Ingalime отреагировална OnePeople в [Android]Входящий звонок   
    Ну смотрите, вообще любой нормальный плеер когда начинает играть запрашивает фокус себе, чтобы другие приложения приостановили проигрывание, когда происходит звонок приложение телефон также забирает аудио фокус себе, ваше задача отловить этот момент, при внедрении этого кода, ваше приложение будет останавливать проигрывание когда потеряет фокус. Во первых это единственно правильный метод. Во вторых ваше приложение будет останавливать проигрывание и при запуске видео в Ютуб, или входящем звонке с мессенджеров.
  3. Thanks
    Ingalime отреагировална 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;  
  4. Thanks
    Ingalime отреагировална Олег Киреев в Android 10 и муз.плеер   
    И на моём запустился и не "упал".
    С Уважением. Олег.
  5. Like
    Ingalime отреагировална Vitaldj в Android 10 (API уровня 29)   
    Вы fgx видели?
  6. Like
    Ingalime отреагировална qz5 в Вышла Community Edition версии 10.4.2 (Delphi & C++Builder)   
    Официальная новость - Delphi & C++Builder FREE Community Editions Updated to Version 10.4.2 Are Now Available!
    Пока надо будет получать для этой версии новые ключи, старые от 10.3.3 не подходят
     
  7. Like
    Ingalime отреагировална Tumaso в Android 10 (API уровня 29)   
    Осталось понять, зачем нам здесь реклама флаттера?
  8. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Логи:
    FATAL EXCEPTION: main
    Process: com.embarcadero.PublicRadio, PID: 9717
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.embarcadero.PublicRadio/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.embarcadero.PublicRadio-1/lib/arm/libPublicRadio.so
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
        at android.app.ActivityThread.access$1100(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
        at android.os.Handler.dispatchMessage(Handler.java)
        at android.os.Looper.loop(Looper.java)
        at android.app.ActivityThread.main(ActivityThread.java)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
    Caused by: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.embarcadero.PublicRadio-1/lib/arm/libPublicRadio.so
        at android.app.NativeActivity.onCreate(NativeActivity.java)
        at com.embarcadero.firemonkey.FMXNativeActivity.onCreate(FMXNativeActivity.java:135)
        at android.app.Activity.performCreate(Activity.java)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
        ... 10 more
    Библиотека libPublicRadio.so по пути /data/app/com.embarcadero.PublicRadio-1/lib/arm присутствует, значит что-то не так с самой библиотекой. Тут уже можно только гадать. Я бы на вашем месте попробовал создать новый проект, перенести в него код и компоненты со старого и попробовать скомпилировать сразу под Андроид-32.
  9. Thanks
    Ingalime отреагировална Олег Киреев в Android 10 и муз.плеер   
    Да и у меня "падает".
    С Уважением. Олег Киреев.
  10. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Давайте apk. По вот этой строчке видно, что файлы он ищёт в каталоге для 64-битных устройств. На 32-битных всё должно работать.
  11. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Сам не обратил внимания на это.
    Для Ingalime:
    Ваш apk внутри выглядит так:

    В директории lib должны находится библиотеки необходимые приложению. Для каждой архитектуры процессоров нужны свои библиотеки. Следовательно они рассортированы по каталогам:

    Внутри каталога arm64-v8a всё необходимое присутствует:

    Соответственно, при установке приложения на 64-битное устройство, установщик будет доставать файлы отсюда.
    Однако, если устанавливать на 32-битное устройство, то установщик будет доставать файлы уже из каталога armeabi-v7a:

    В этом каталоге есть библиотека BASS, значит вы её всё-же задеплоили. Однако других файлов приложения тут нет, из-за чего оно и крашится при запуске.
  12. Thanks
    Ingalime отреагировална Andrey Efimov в Android 10 и муз.плеер   
    Оба apk файла собраны для 64-бит.
    Вам нужно собрать 32 битную версию:

    Честно говоря, я не знаю как вам ещё объяснить это... (раз проблемы возникают даже на таком этапе, то я обязан сообщить, что на форуме существует раздел: Ищу подрядчика)
    Перед тем как вы соберётесь выложить сюда собранный 32-битный apk, проверьте его, открыв например в винраре. Зайдите в папку "lib" и проверьте каждую папку. Выше я уже написал, что будет внутри каждой папки для 32-битного apk и для 64-битного apk (https://fire-monkey.ru/topic/7447-android-10-и-музплеер/?do=findComment&comment=43249). Т.о. в 32-битном apk должна получиться примерно такая структура (на примере Project1):
    armeabi - заглушка libProject1.so. armeabi-v7a - ваш проект libProject1.so, сервис, библиотека bass и т.д. mips - заглушка libProject1.so.  
    p.s. По поводу логов, то они сообщают о том, что не найдена библиотека PublicRadio (что собственно подтверждается и текстом ошибки и вскрытием apk файла, в нем библиотека есть только в папке для 64-бит, т.е. apk файл собран не для 32-бит).
     
  13. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Android 6.0.1 - падение. А вы хоть разобрались с Deployment? Я так понимаю, что приложение падает от того, что пытается найти файлы библиотеки BASS для armeabi-v7a, но не находит. А на 64-битных устройствах всё работает от того, что им нужны файлы для arm64-v8a, которые вы задеплоили.
  14. Thanks
    Ingalime отреагировална Vitaldj в APK для гугл Store   
    Если честно, а чем проблема сделать aab и послать как требует Google ? Делая простой apk  вы обкрадываете 32 или 64 бита. 
  15. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    У меня, кстати, появилось предположение, почему прога запустилась у меня на Android 10, но на Android 6.0.1 и у Олега Киреева на Android 10 - нет. Возможно, это связано с тем, что Вы скомпилировали приложение только под Android 64. У моего телефона процессор 64-разрядный(Samsung Exynos 7 Octa(5433)), но, как сказала Aida64, 32-bit Mode. У Олега Киреева процессор Samsung Exynos 7 Octa 7870, тоже 64-разрядный, но, поскольку разница между датами выхода чипов всего 2 года, то, возможно, он тоже работает в 32-битном режиме.  На Нокиа 3.1, на которой всё работало, стоит 64-разрядный Mediatek MT6750n. Сейчас ещё проверю на Самсунг Ноут 10+ с чипом Qualcomm Snapdragon 855 в 64-разрядном режиме.
    Вот тут было обсуждение по поводу устройства на базе такого же чипа, как у Олега, где оказалось, что ЦПУ поддерживает 64-битные инструкции, но прошивка - нет: https://stackoverflow.com/questions/49184689/why-does-my-android-device-with-armv8-based-cpu-cores-exynos-7-octa-7870-not-s
  16. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    На Ноут 10+ под управлением ОС Android 11 всё исправно работает, так что лучше всё же скомпилировать 32-битный апк, хотя бы ради интереса.
  17. Thanks
    Ingalime отреагировална Andrey Efimov в Android 10 и муз.плеер   
    но при этом подсовываете туда библиотеку bass...
    В этих папках (кроме arm64-v8a (для 64 бит) и armeabi-v7a (для 32 бит)) должны лежать заглушки, которые в случае несовместимости с девайсом буду выдавать сообщение типа такого "Application does not support this device".
    Собственно, PowerOwl, уже сделал предположение.
     
     
  18. Like
    Ingalime отреагировална PowerOwl в Ошибка "Duplicate resource: type RCDATA ID tform1_lgxhdpiph"   
    Проблемы появились.?
    Но всё же я нашёл решение.  Короче.
    Всё дело в том, что Дельфя почему-то решила, что одной директивы
    {$R *.LgXhdpiPh.fmx ANDROID} ей мало, и почему-то решила добавить ещё по одной на каждый юнит.
    Решение простое:

     
  19. Like
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Крайне сильно поддерживаю. У меня самого сейчас в проекте настал момент, когда нужно написать службу переднего фона, а инфы в интернете централизованной нет.
  20. Like
    Ingalime получил реакцию от PowerOwl в Android 10 и муз.плеер   
    Cкриншот деплоя 64 бит. 32 бит я не компилировала вообще.
    С дебагом у меня тоже были проблемы. Компилятор ембаркадеро упорно писал что не может распознать Readmi5A и отваливался.
    Компилировала в релизе с ShowMessage-ми в поисках ошибок.
    Если у кого есть терпение на скачивание то ссылка на весь проект: http://nsnllc.um.la/delphi821FMX.zip
    Проект у меня по пути C:\Users\Lena\Documents\Embarcadero\Studio\Projects\delphi82
    Хотелось бы по окончании дискуссии, чтобы на этом форуме кто-то из специалистов выложил статью как правильно создать службу переднего плана в дельфи.
    Служба весьма полезная, но централизованной информации нет и вообще все странно работает - в одних версиях нормально, в других падение.
     

  21. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Попробуйте в BIOS включить "Secure virtual machine mode". И напишите, какой у Вас процессор.
    Можете выложить хотя бы .pas файл(-ы), чтобы хоть примерно представлять, в чём ошибка. Я выложил логи снятые с logcat, можете сами посмотреть, в чём там может быть проблема.
  22. Like
    Ingalime отреагировална Andrey Efimov в Android 10 и муз.плеер   
    Скриншот Deployment Manager'а в "студию" (для 32 и 64 битной версии). Отсортируйте по столбцу Local Name.
  23. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Но у меня на десятке на Нокиа всё запускалось и работало. Надо бы действительно протестировать на разных устройствах, но у меня, к сожалению, у компьютера настолько древний процессор, что на нём просто не запускается эмулятор от Android Studio.
  24. Thanks
    Ingalime отреагировална Олег Киреев в Android 10 и муз.плеер   
    И в этой новой версии OS сообщает "В приложении произошёл сбой".
    С Уважением. Олег.
  25. Thanks
    Ingalime отреагировална PowerOwl в Android 10 и муз.плеер   
    Честно, сам понятия не имею, где эмулятор в 10.4. Можно использовать эмуль от Android Studio, там можно и на куче версий андроида проверить(там вроде от 4.4 до 11), и проэмулировать разные устройства, и ещё кучу всяких настроек.
    Вот ссылка на документацию абракадабры, там вроде всё расписано: https://www.embarcadero.com/starthere/xe7/mobdevsetup/android/en/creating_an_android_emulator.html
    Хотя я у себя не нашёл эмулятора, может его вырезали в новых версиях RAD Studio.
×
×
  • Создать...