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

Ingalime

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

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

  • Посещение

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

    5

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

  1. Like
    Ingalime отреагировална Сергей Сергеев в Delphi 10.4.1 и Андроид 11   
    Привет..сегодня влепили кол в гугл плей - приложение ( скомпиленное в 10.3.3 ) не запускается на Pixel 2 ( Android 11).
    Порыл немного , на сайте Емба - 10.4 - А10 только..
    но 10.4.1 - тоже?? уже устройства есть.. почитал что там нового  в 11 ...  что то с разрешениями, мультиюзер.. видимо капут.. 
    у кого то работает? не успели похоже на WebView перевести...

  2. Like
    Ingalime отреагировална Кирилл Лукманов в 1 nov 2020   
    да, это действие на стороне гугла как я понял, типа деньги кончились на карте, и подписка не пролонгировалась, тогда аккаунт с таким статусом должен в холд уходить, и гугл будет пушить в течении 30 дней его а далее отменять
     
    Соберу все информацию воедино:
    1. В консоли разработчика в разделе подписок включить опцию "Временная блокировка аккаунта"
    2. Добавить кнопку "Hold account", если мы самостоятельно хотим заморозить аккаунт на 30 дней. Только я не знаю нужна ли она или нет и какой обработчик нужно прописать
    3. Если у юзера не хватает денег, то подписка уходит в холд на 30 дней. Сама подписка будет  paymentState": 0  # Payment pending
    4. 
    If the user does not fix their payment method before the end of the account hold period, you receive a SUBSCRIPTION_CANCELLED Real-time developer notification. For instructions on handling a cancellation, see subscription cancellations. When you query for the subscription that was cancelled in this way, the returned expiryTimeMillis is set to a past timestamp, and the cancelReason has a value of 1:
    {   "kind": "androidpublisher#subscriptionPurchase",   ...   "expiryTimeMillis": timestamp_in_past,   "autoRenewing": false,   ...   "cancelReason": 1  # The system cancelled the subscription }  
    Подправьте меня если я неправильно понял
    Только в итоге, я так и не понял, какие правки нужно вносить кодом
  3. Thanks
    Ingalime отреагировална OnePeople в Android Services   
    И нужно внимательно читать справку гууууугл

  4. Like
    Ingalime отреагировална DevMachines в ANN: FireDocking 1.0 beta1 компонент докинга для FireMonkey   
    Коллеги - выпущена первая бета-версия нового компонента FireDocking 1.0 beta 1 для Delphi Firemonkey. 
    В текущей предварительной версии реализованы следующие функции закрепленных панелей,  которые будут включены в окончательную версию: возможность отсоединить панель и сделать ее плавающей на экране или скрыть панели по краям формы и сделать их Auto-Hide панелями. Поддержка двойного щелчка мыша по строке заголовка панели (отсоедините панель или верните ее в запомненное место).  Контейнеры с разделенными панелями и контейнеры с вкладками поддерживают без ограничений.
    Компонент поддерживает возможность скрытия центральной области докинга, тем самым обеспечивая концепцию докирования "Везде". 
    Компонент поддерживает любые темы и стили, поставляемые с Delphi RAD Studio. FireDocking можно развернуть на любом FMX.TControl внутри приложения. 
    При необходимости одно приложение может иметь несколько независимых инфраструктур докирования, развернутых на разных FMX.TControl. 
    Также представлен простой плугин для Delphi IDE, который позволяет вам добавить менеджер докинга в форму FMX.
    Обратите внимание, текущая версия не содержит следующих функций, которые будут включены в окончательную версию - возможность сохранять и восстанавливать 
    макет стыковки в/из XML-файла и поддержка MacOS.
    Вы можете скачать предварительную бета-версию здесь - FireDockingInstaller1.0.0b1_RAD_Sydney_10.4Trial.exe
    P.S. Реализация архитектуры данного компонента сделана на основе другого нашего компонента докинга для Qt.C ++ - QtitanDocking.
    Однако FireDocking - это полноценный компонент FMX, полностью разработанный на Delphi-Pascal с минимальными вставками WinAPI и MacOS API.
     
    Sincerely,
    Developer Machines
    https://www.devmachines.com
  5. Thanks
    Ingalime отреагировална OnePeople в Android Services   
    Попробуйте еще сделать так
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />        jpn:=TAndroidHelper.Context.getPackageName;
           ps:=TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE);
        if ps <> nil then
          begin
          pm := TJPowerManager.Wrap((ps as ILocalObject).GetObjectID);
          end;
         if pm.isIgnoringBatteryOptimizations(jpn)=false then
            begin

             Intent := TJIntent.Create;
              Intent.setAction(TJSettings.JavaClass.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
             intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(jpn)));
             TAndroidHelper.Context.startActivity(Intent);
            end;
     
     
  6. Thanks
    Ingalime отреагировална Andrey Efimov в Android Services   
    Всё возможно...
    В данном случае, у Джима код отрабатывал как ожидается, по причине того (я предполагаю), что он тестировал его на Nexus 5 (2015 чистый Android 6). Я также занимался изучением сервисов примерно в 2016, но тестировал этот код на многих девайсах. Как помню, на Android 4.4.2 всегда отрабатывал как ожидается. А вот на более новых версиях + (это жирный плюс, влияющий очень на многое) девайсах разных производителей (очень выделялись на тот момент Xiaomi) дела обстояли очень плохо, т.к. производители вводили свои ограничения для приложений (например, "авто запуск приложения/сервиса" - пользователь должен был разрешить подобное поведение в настройках приложения).
     
    Учитывая свой опыт, могу дать такой совет:
    Попробуйте дать все возможные разрешения на автозапуск приложения/сервиса примерно тут: "Безопасность – Разрешения – Автозапуск – Название вашего приложения" и проверить код ещё раз.
    Вот ещё небольшое описание из моего старого проекта:
     
    Из-за всех этих изменений от производителей, тема стала достаточно непростой. По этой причине считаю, что начинать нужно с нуля, т.е. с официальной справки гугла:
    Службы
    Foreground services
  7. Like
    Ingalime отреагировална destroyer86 в Serial port   
    Да
    https://ru.stackoverflow.com/questions/1187519/Работа-с-библиотекой-com-github-mik3yusb-serial-for-android-из-delphi?noredirect=1#comment2069760_1187519
     
  8. Like
    Ingalime отреагировална Andrey Efimov в Работа с android.hardware.usb.UsbManager   
    Попробуйте так:
    var Device: JUsbDeviceConnection; ... Device := FUsbManager.JavaClass.openDevice();  
    p.s. Учитывайте тот факт, что обёртка могла сгенериться неправильно. Java2Op не всегда отрабатывает как надо, поэтому появляется необходимость проверки и правки результата.
    p.s.2. И вроде как у вас как раз такой случай... Попробуйте вот эту:
    JUsbManagerClass = interface(JObjectClass) ['{1048A6E9-E1B5-4DA5-A168-ED91E8DE5284}'] {class} function _GetACTION_USB_ACCESSORY_ATTACHED: JString; cdecl; {class} function _GetACTION_USB_ACCESSORY_DETACHED: JString; cdecl; {class} function _GetACTION_USB_DEVICE_ATTACHED: JString; cdecl; {class} function _GetACTION_USB_DEVICE_DETACHED: JString; cdecl; {class} function _GetEXTRA_ACCESSORY: JString; cdecl; {class} function _GetEXTRA_DEVICE: JString; cdecl; {class} function _GetEXTRA_PERMISSION_GRANTED: JString; cdecl; {class} property ACTION_USB_ACCESSORY_ATTACHED: JString read _GetACTION_USB_ACCESSORY_ATTACHED; {class} property ACTION_USB_ACCESSORY_DETACHED: JString read _GetACTION_USB_ACCESSORY_DETACHED; {class} property ACTION_USB_DEVICE_ATTACHED: JString read _GetACTION_USB_DEVICE_ATTACHED; {class} property ACTION_USB_DEVICE_DETACHED: JString read _GetACTION_USB_DEVICE_DETACHED; {class} property EXTRA_ACCESSORY: JString read _GetEXTRA_ACCESSORY; {class} property EXTRA_DEVICE: JString read _GetEXTRA_DEVICE; {class} property EXTRA_PERMISSION_GRANTED: JString read _GetEXTRA_PERMISSION_GRANTED; end; [JavaSignature('android/hardware/usb/UsbManager')] JUsbManager = interface(JObject) ['{6F603A25-E816-4012-9B23-054B428A4A75}'] function getAccessoryList: TJavaObjectArray<JUsbAccessory>; cdecl;//Deprecated function getDeviceList: JHashMap; cdecl;//Deprecated function hasPermission(device: JUsbDevice): Boolean; cdecl; overload;//Deprecated function hasPermission(accessory: JUsbAccessory): Boolean; cdecl; overload;//Deprecated function openAccessory(accessory: JUsbAccessory): JParcelFileDescriptor; cdecl;//Deprecated function openDevice(device: JUsbDevice): JUsbDeviceConnection; cdecl;//Deprecated procedure requestPermission(device: JUsbDevice; pi: JPendingIntent); cdecl; overload;//Deprecated procedure requestPermission(accessory: JUsbAccessory; pi: JPendingIntent); cdecl; overload;//Deprecated end; TJUsbManager = class(TJavaGenericImport<JUsbManagerClass, JUsbManager>) end;  
    p.s.3. С правилами создания обёртки можно ознакомиться тут https://delphifmandroid.blogspot.com/2014/07/java.html
    Статья старая, но правила связанные с полями/константами и методами действительны по сей день.
  9. Like
    Ingalime отреагировална krapotkin в Возможность реализации экспорта/импорта данных приложения в виде файлов   
    вот уж точно базу отправлять по почте это странно
    отправил по почте табличку с данными, можно даже HTML, да и все
    и пусть себе начисляет
  10. Like
    Ingalime отреагировална OnePeople в Возможность реализации экспорта/импорта данных приложения в виде файлов   
    Можете посмотреть какие файлы там есть:
    var  files: TStringDynArray;
    files := TDirectory.GetFiles(TPath.GetHomePath);
      TArray.Sort<string>(files, TComparer<string>.Construct(CompareLowerStr));
      for i := 0 to Length(  files) - 1 do
      begin
    Memo1.lines.add(files);
     end;
  11. Like
    Ingalime отреагировална OnePeople в Возможность реализации экспорта/импорта данных приложения в виде файлов   
    Ну приложение имеет доступ к этой папке и может делать что хочешь с этим файлом, но только твое приложение, все легко реализуется!
  12. Thanks
    Ingalime отреагировална OnePeople в [Android] Воспроизводить аудио   
    С радостью бы помог, и скорее всего если не сможете сделать то помогу, но только ближе к ноябрю((( 
    Только закончил с поисками и реализацией отловки AudioFocus, наконец то)))))))))
    У самого музыка пока не в сервисе, но я думаю как то так, без 
    AndroidServiceUnBind  
    function TCronysDM.AndroidServiceStartCommand(const Sender: TObject;
      const Intent: JIntent; Flags, StartId: Integer): Integer;
    Var
      Action: string;
    begin
      Action := JStringToString(Intent.getAction);
      if Action = 'StartService' then
      begin
    BASS_Init(-1, 44100, 0, nil, nil); //инициализация bass BASS_StreamFree(str); str := BASS_StreamCreateURL(PChar('http://91.199.194.34:8000'), 0, BASS_UNICODE, nil, nil); //ShowMessage(IntToStr(BASS_ErrorGetCode)); If BASS_ErrorGetCode = 0 Then Begin BASS_ChannelPlay(str, True); //начать воспроизведение End;   end;
      if Action = 'StopService' then
      begin
    BASS_ChannelStop(str); //остановить воспроизведение BASS_StreamFree(str);     JavaService.stopSelf;
        result := TJService.JavaClass.START_NOT_STICKY; // don't reload service
        exit;
      end;
      result := TJService.JavaClass.START_STICKY; // rerun service if host app stops
    end;
     
     
    запуск сервиса
            FService := TJIntent.Create;
            FService.setClassName(TAndroidHelper.Context.getPackageName(),
            TAndroidHelper.StringToJString('com.embarcadero.services.cronysrv'));
            FService.setAction(StringToJString('StartService'));
            TAndroidHelper.Activity.startService(FService);
     
    По вышему коду при убийстве приложения, убивается и сервис???? Это вопрос
  13. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    емба сломала это еще в Берлине, в Токио не починили.
    Службы "нормально" работают только в Сиетле
  14. Like
    Ingalime отреагировална Pax Beach в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    Из PlatformSDK (PlatformSDKs\android-sdk-windows\sources\android-23\android\support\v4\content\) портировал в Delphi класс TJLocalBroadcastManager.
    Это очень полезный класс, если вы не хотите рассылать сообщения по всей системе, а есть необходимость общаться только внутри приложения или между хост-приложением и сервисом.
    Во вложении сам класс, в своем приложении убедитесь, что в Target Platforms (Android) → Android → Libraries включена библиотека android-support-v4.dex.jar.
     
    Прилагаю пример, для изучения и использования в работе, который демонстрирует работу обычного BroadcastReceiver и LocalBroadcastReceiver.
    В примере демонстрируется работа сообщений в приложении и сервисе. Сначала делаем build проекта LBCRService, потом будет доступна возможность собрать LocalBCR.
    Собираю в Berlin 10.1, но на младших версиях тоже должно работать, по крайней мере в Seatlle.
     
    В реализации методов
    procedure RegisterReceiver(); procedure UnRegisterReceiver(); необходимо снять комментарий с соответствующих строчек, в зависимости от того, какой тип ресивера вы хотите использовать.
     
     
    Androidapi.JNI.LocalBroadcastManager.pas.zip
    LocalBroadCastReceiver.zip
  15. Thanks
    Ingalime отреагировална OnePeople в [Android] Воспроизводить аудио   
    Создайте сервис в нем код из вашего приложения по запуску воспроизведения
    А в приложении, делайте отправку broadcast сообщений о старте или остановки проигрывания
    В этом радио так и сделано! 
     
    И нотификейшен с кнопками тоже можно на делфи сделать!
  16. Like
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    в оригинале нет такого слова AApplication
    посмотрите, что реально загрузилось
    обратите внимание, что delphi в 2021 все еще не умеет считать символы если перевод строки #10 а не #13#10 
    поэтому показывает на экране верно, а если что-то автоматически вставить, то промахивается 
    я бы рекомендовал пересохранить ваши файлы с переводом строки #13#10
     
  17. Like
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    насколько я понимаю, там целая система, состоящая из программы, сервиса и примочек, которые позволяют делать кнопки в нотификейшн
    Делфи это не осилит, надо идти в натив
  18. Like
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    но при этом звуком телефона из программы рулить можно)
  19. Like
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    begin Result := false; это вот это. там по-любому потом переписывается значение, поэтому она говорит, что строка лишняя
  20. Thanks
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    в целом статус не нужен. он появляется от сервера. это значит инет есть.
    т.е. 
    /// Result := aResp.StatusCode < 400; Result := true; и ниже достаточно
    check := CheckInet; If not check Then ...  
  21. Like
    Ingalime отреагировална OnePeople в Программное одноразовое применение InnerGlowEffect к изображению   
    Поздно, но может кому пригодится
    function TForm1.Blur(sbit: TBitmap): TBitmap; var   FilterClass: TFilterClass;   FFilter: TFilter;   FFilterParams: TFilterRec;   BitmSource, BitmDest: TBitmap; begin       BitmSource:=TBitmap.Create;       BitmSource.Assign(sbit);       Result:=TBitmap.Create;       FFilter := TFilterManager.FilterByName('GaussianBlur');       FilterClass := TFilterManager.FilterClassByName('GaussianBlur');       FFilterParams := FilterClass.FilterAttr;       FFilter.ValuesAsFloat['BlurAmount']:=5.7;       FFilter.Apply;       FFilter.ValuesAsBitmap['Input'] := BitmSource;       Result.Assign(FFilter.ValuesAsBitmap['output']);       FreeAndNil(FFilter);       FreeAndNil(BitmSource); end; function TForm1.Tint(sbit: TBitmap; tintColor: TAlphaColor): TBitmap; var   FilterClass: TFilterClass;   FFilter: TFilter;   FFilterParams: TFilterRec;   BitmSource, BitmDest: TBitmap; begin       BitmSource:=TBitmap.Create;       BitmSource.Assign(sbit);       Result:=TBitmap.Create;       FFilter := TFilterManager.FilterByName('FillRGB');       FilterClass := TFilterManager.FilterClassByName('FillRGB');       FFilterParams := FilterClass.FilterAttr;       FFilter.ValuesAsColor['Color']:=tintColor;       FFilter.Apply;       FFilter.ValuesAsBitmap['Input'] := BitmSource;       Result.Assign(FFilter.ValuesAsBitmap['output']);       FreeAndNil(FFilter);       FreeAndNil(BitmSource); end;  
  22. Like
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    круто. Никогда не писал в поддержку! )))
     
  23. Thanks
    Ingalime отреагировална OnePeople в [Android] Воспроизводить аудио   
    Пользуюсь этим pas попробуйте
    bassandr.rar
  24. Thanks
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    Простой способ реализовать это-использовать этот атрибут для вашего AndroidManifest.xml , где вы разрешаете все http для всех запросов:
    android:usesCleartextTraffic="true"
  25. Like
    Ingalime отреагировална krapotkin в [Android] Воспроизводить аудио   
    есть еще предположение, что надо разрешить http на android. По умолчанию только https работает
     
×
×
  • Создать...