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

Savage

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

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

  • Посещение

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

    3

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

  1. Like
    Savage получил реакцию от Ingalime в Изменение стандартного звука а push-уведомлении   
    Добавил многострочность в PUSH-уведомление
    Надо или нет пересобирать classes.dex точно не скажу. Говорят, что на 10.2.3 не надо
    Вначале просто подбросить в проект fmx.jar , если изменений нет, то и classes.dex
     
    NotificationPublisher.zip
  2. Like
    Savage получил реакцию от Ingalime в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  3. Like
    Savage получил реакцию от Superator в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  4. Thanks
    Savage отреагировална rareMax в Telega π - Библиотека для работы с Telegram Bot API в Delphi   
    Автор: Максим Сысоев
    Репозиторий: Github
    Связь со мной: Telegram
     
    Telega π - Библиотека для работы с Telegram Bot API в Delphi
    Библиотека для работы с Telegram Bot API
    Зависимости
    RAD Studio CE  CloudAPI Примеры
    Получение Username бота
    program Project5; {$APPTYPE CONSOLE} {$R *.res} uses TelegaPi.Bot, TelegaPi.Types, System.SysUtils; var Telegram: TTelegramBot; begin Telegram := TTelegramBot.Create({$I TokenTelegramBot.inc}); try { TODO -oUser -cConsole Main : Insert code here } Writeln(Telegram.getMe.Username); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; Telegram.Free; end. Пример автоответчика
    Напишите ему "привет"
    Код: https://gist.github.com/ms301/c7281f443f481115b7643116535e697d  

  5. Like
    Savage отреагировална Brovin Yaroslav в Как я могу скрыть / показать клавиатуру под "Android"?   
    Русский
    За управление виртуальной клавиатурой в FireMonkey отвечает сервис IFMXVirtualKeyboardService (Embarcadero Doc Wiki). Который позволяет отображать и скрывать клавиатуру.
    Для скрытия клавиатуры достаточно выполнить следующий код:
    uses FMX.Platform, FMX.VirtualKeyboard; procedure TForm5.ButtonHideKeybordClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; Чтобы показать клавиатуру для контрола:
    procedure TForm5.ButtonShowKeyboardClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(Edit1); end;

    English 
    FireMonkey has special service for managing Virtual Keyboard. It is IFMXVirtualKeyboardService (Embarcadero Doc Wiki). It allows show and hide keyboard.
    For showing virtual keyboard use next code: uses FMX.Platform, FMX.VirtualKeyboard; procedure TForm5.ButtonHideKeybordClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Request service of visrtual keyboard if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; For showing virtual keyboard for control:
    procedure TForm5.ButtonShowKeyboardClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Request service of visrtual keyboard if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(Edit1); end;
  6. Like
    Savage отреагировална Brovin Yaroslav в Как закрыть форму на мобильной платформе?   
    Чтобы закрыть форму с выгрузкой ее из памяти, нужно сделать следующее:
    Повесить обработчик на событие формы TForm.OnClose. Установить переданные параметр Action в TCloseAction.caFree procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; end; Doc Wiki: Releasing Forms in iOS Apps
  7. Like
    Savage получил реакцию от Евгений Корепов в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  8. Like
    Savage отреагировална Евгений Корепов в Узнать IP адрес устройства без дополнительных разрешений   
    Тут в процессе работы над одним проектом понадобилось узнать IP адрес устройства. Очень не хотелось включать дополнительные разрешения приложению. Думал ограничится одним "Доступ в Интернет".
    Вот как это можно сделать:
    С помощью TIdUDPServer посылаем широковещательное сообщение, с помощью того же TIdUDPServer сами получаем его и в ABinding узнаем с какого IP оно пришло. Таким образом мы узнаем IP адрес интерфейса с маршрутом по умолчанию.
    Вот код, все просто:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdGlobal, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer; const ConstUDPSendString = 'dfgb2hd3f6gbf'; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } FUDPServer : TIdUDPServer; FMyIP : String; procedure OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure GetMyIP; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin GetMyIP; end; procedure TForm1.GetMyIP; begin FMyIP:=''; FUDPServer:=TIdUDPServer.Create; FUDPServer.DefaultPort:=46734; FUDPServer.BroadcastEnabled:=True; FUDPServer.OnUDPRead:=OnUDPServerUDPRead; FUDPServer.Active:=True; FUDPServer.Broadcast(ConstUDPSendString, FUDPServer.DefaultPort); end; procedure TForm1.OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin AThread.Synchronize(AThread, procedure begin if BytesToString(AData).Equals(ConstUDPSendString) and FMyIP.IsEmpty then FMyIP:=ABinding.PeerIP; end ); end; end.  
  9. Like
    Savage получил реакцию от Евгений Корепов в Уведомление о прочитанности PUSH уведомления   
    Для получения инфо о доставке пуша, надо использовать XMPP
    Вот гугломануал Firebase Cloud Messaging XMPP Protocol
    ПО для отправки сообщений (комп, сервер и т.д.)     <--   обмен по протоколу XMPP   --->      Сервер гугла FCM  <------->  Андроид устройство
    использовал IdTCPClient
     
      Host  fcm-xmpp.googleapis.com
      Port  5236
    IdTCPClient.Connect
    вот сценарий
    >>> - отправка на FCM 
    <<< - ответ от FCM
    >>> здороваемся (IdTCPClient1.IOHandler.WriteLn ) <stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"> <<< (IdTCPClient1.IOHandler.Readln) <stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> <<< <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features> >>> логинимся <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">Base64Encode(sender_id@gcm.googleapis.com+ApiKey)</auth> <<< <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> >>> отправляем обязательный пакет <stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"> <<< <stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> <<< <stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> >>> отправляем обязательный пакет <iq type="set"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind></iq> <<< <iq type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>sender_id@gcm.googleapis.com/000000</jid></bind></iq> >>> отправляем сообщение <message><gcm xmlns="google:mobile:data">{"message_id":"20","delivery_receipt_requested":true,"to":"DeviceToken","data":{"title":"Message title","message":"Message text"}}</gcm></message> <<< получаем подтверждение, что гуглосервер принл сообщение от нас <message><data:gcm xmlns:data="google:mobile:data">{"message_type":"ack","from":"DeviceToken","message_id":"20"}</data:gcm></message> <<< получаем подтверждение, что сообщение доставлено на андроид-устройство <message to="sender_id@gcm.googleapis.com" from="devices@gcm.googleapis.com" type="normal"><gcm xmlns="google:mobile:data">{"data":{"message_status":"MESSAGE_SENT_TO_DEVICE","device_registration_id":"DeviceToken","message_sent_timestamp":"1524141512313","original_message_id":"20"},"time_to_live":0,"from":"gcm.googleapis.com","message_id":"dr2:20","message_type":"receipt","category":"com.pushTest"}</gcm></message> Ключ АПИ и идентификатор отправителя надо брать в консоли Firebase https://console.firebase.google.com/u/0/project
    Подробно описано тут http://blog.rzaripov.kz/2017/02/firebase-android-ios.html
     

  10. Like
    Savage получил реакцию от Rusland в Уведомление о прочитанности PUSH уведомления   
    Для получения инфо о доставке пуша, надо использовать XMPP
    Вот гугломануал Firebase Cloud Messaging XMPP Protocol
    ПО для отправки сообщений (комп, сервер и т.д.)     <--   обмен по протоколу XMPP   --->      Сервер гугла FCM  <------->  Андроид устройство
    использовал IdTCPClient
     
      Host  fcm-xmpp.googleapis.com
      Port  5236
    IdTCPClient.Connect
    вот сценарий
    >>> - отправка на FCM 
    <<< - ответ от FCM
    >>> здороваемся (IdTCPClient1.IOHandler.WriteLn ) <stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"> <<< (IdTCPClient1.IOHandler.Readln) <stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> <<< <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features> >>> логинимся <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">Base64Encode(sender_id@gcm.googleapis.com+ApiKey)</auth> <<< <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> >>> отправляем обязательный пакет <stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"> <<< <stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> <<< <stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> >>> отправляем обязательный пакет <iq type="set"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind></iq> <<< <iq type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>sender_id@gcm.googleapis.com/000000</jid></bind></iq> >>> отправляем сообщение <message><gcm xmlns="google:mobile:data">{"message_id":"20","delivery_receipt_requested":true,"to":"DeviceToken","data":{"title":"Message title","message":"Message text"}}</gcm></message> <<< получаем подтверждение, что гуглосервер принл сообщение от нас <message><data:gcm xmlns:data="google:mobile:data">{"message_type":"ack","from":"DeviceToken","message_id":"20"}</data:gcm></message> <<< получаем подтверждение, что сообщение доставлено на андроид-устройство <message to="sender_id@gcm.googleapis.com" from="devices@gcm.googleapis.com" type="normal"><gcm xmlns="google:mobile:data">{"data":{"message_status":"MESSAGE_SENT_TO_DEVICE","device_registration_id":"DeviceToken","message_sent_timestamp":"1524141512313","original_message_id":"20"},"time_to_live":0,"from":"gcm.googleapis.com","message_id":"dr2:20","message_type":"receipt","category":"com.pushTest"}</gcm></message> Ключ АПИ и идентификатор отправителя надо брать в консоли Firebase https://console.firebase.google.com/u/0/project
    Подробно описано тут http://blog.rzaripov.kz/2017/02/firebase-android-ios.html
     

  11. Like
    Savage получил реакцию от #WAMACO в Изменение стандартного звука а push-уведомлении   
    Надо подключать еще  android-support-v4.jar
    Вот мои файлы
    компиляция
    "C:\Program Files\Java\jdk1.8.0_60\bin\javac" -source 1.8 -target 1.8 "R:\fmx\com\embarcadero\rtl\notifications\NotificationPublisher.java" -cp "C:\Program Files (x86)\Android\android-sdk\platforms\android-17\android.jar";"C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\android-support-v4.jar" -d "r:\fmx" pause  
    сборка
     
    echo off setlocal set JAVA="C:\Program Files\Java\jdk1.8.0_60\bin" set ANDROID_PLATFORM="C:\Program Files (x86)\Android\android-sdk\platforms\android-17" set DX_LIB="C:\Program Files (x86)\Android\android-sdk\build-tools\27.0.3\lib" set EMBO_DEX="C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\classes.dex" set FMX_JAR="C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\fmx.jar" set PROJ_DIR=%CD% set VERBOSE=0 echo. echo COPY ORIGINAL fmx.jar copy %FMX_JAR% %PROJ_DIR%\fmx.jar" echo. echo UPDATE FILE NotificationPublisher.class %JAVA%\jar uf "fmx.jar" "com\embarcadero\rtl\notifications\NotificationPublisher.class" echo. echo CONVERTING FROM jar TO dex mkdir output\dex 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=--verbose call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\fmx.jar echo. echo MERGING dex FILES echo.com.android.dx.merge.DexMerger java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% echo. del output\dex\test_classes.dex del output\jar\test_classes.jar rmdir output\jar echo. echo Now we have the end result, which is output\dex\classes.dex pause :Exit endlocal  
    FMX.zip
  12. Like
    Savage получил реакцию от Ingalime в Изменение стандартного звука а push-уведомлении   
    Надо подключать еще  android-support-v4.jar
    Вот мои файлы
    компиляция
    "C:\Program Files\Java\jdk1.8.0_60\bin\javac" -source 1.8 -target 1.8 "R:\fmx\com\embarcadero\rtl\notifications\NotificationPublisher.java" -cp "C:\Program Files (x86)\Android\android-sdk\platforms\android-17\android.jar";"C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\android-support-v4.jar" -d "r:\fmx" pause  
    сборка
     
    echo off setlocal set JAVA="C:\Program Files\Java\jdk1.8.0_60\bin" set ANDROID_PLATFORM="C:\Program Files (x86)\Android\android-sdk\platforms\android-17" set DX_LIB="C:\Program Files (x86)\Android\android-sdk\build-tools\27.0.3\lib" set EMBO_DEX="C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\classes.dex" set FMX_JAR="C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\fmx.jar" set PROJ_DIR=%CD% set VERBOSE=0 echo. echo COPY ORIGINAL fmx.jar copy %FMX_JAR% %PROJ_DIR%\fmx.jar" echo. echo UPDATE FILE NotificationPublisher.class %JAVA%\jar uf "fmx.jar" "com\embarcadero\rtl\notifications\NotificationPublisher.class" echo. echo CONVERTING FROM jar TO dex mkdir output\dex 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=--verbose call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\fmx.jar echo. echo MERGING dex FILES echo.com.android.dx.merge.DexMerger java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% echo. del output\dex\test_classes.dex del output\jar\test_classes.jar rmdir output\jar echo. echo Now we have the end result, which is output\dex\classes.dex pause :Exit endlocal  
    FMX.zip
  13. Like
    Savage получил реакцию от #WAMACO в Изменение стандартного звука а push-уведомлении   
    Добавил многострочность в PUSH-уведомление
    Надо или нет пересобирать classes.dex точно не скажу. Говорят, что на 10.2.3 не надо
    Вначале просто подбросить в проект fmx.jar , если изменений нет, то и classes.dex
     
    NotificationPublisher.zip
  14. Like
    Savage получил реакцию от Rusland в Изменение стандартного звука а push-уведомлении   
    Добавил многострочность в PUSH-уведомление
    Надо или нет пересобирать classes.dex точно не скажу. Говорят, что на 10.2.3 не надо
    Вначале просто подбросить в проект fmx.jar , если изменений нет, то и classes.dex
     
    NotificationPublisher.zip
  15. Like
    Savage отреагировална Brovin Yaroslav в Инструкция по установке набора компонентов FGX   
    Скачать пакет можно здесь: Скачать
    1. Удалить старый пакет библиотеки FGX
    Открываем среду IDE RAD Studio XE7 с административными правами. В меню открываем менеджер пакетов: "Component -> Install Packages..."

    Среди списка компонентов находим "FMX Extension Components". Выделяем и нажимаем кнопку "Remove"

    2. Установка пакета библиотеки FGX
    Открываем в среде группу проектов. "File -> Open Project -> FGXGroup.groupproj"

    Собираем пакет fgx210 для всех требуемых платформ. Выделяем в менеджере проектов нужную платформу "Target Platforms" и в контекстном меню пакета fgx210 выбираем "Build"

    Далее повторяем сборку для всех целевых платформ.
    3. Устанавливаем Design-Time пакет
    Выбираем в группе проектов dclfgx210 пакет и в контекстном меню выбираем "Install"
    Если пакет успешно установлен, то появится сообщение со списком зарегистрированных компонентов следующего вида:

    Все! Установка окончена.
  16. Like
    Savage отреагировална ENERGY в Что невозможно сделать на Delphi для Android?   
    Delphi хоронят уже лет 15, это все слова. Нет идеальных инструментов. У всех какие то косяки, втч и у нативных средств, ведь все это придумывают люди, люди не роботы.
    На деле Delphi отличное средство для мультиплатформенной разработки вполне сложных программ. Мне как фрилансеру вполне хватает. Производительность гораздо лучше чем у Angular\Ionic, которые по факту WebView - веб в браузере - очень тормозное решение и подходит только для формочки "логин\пароль".  Также по производительности и глюкам Delphi имхо лучше чем ReactJS, и Xamarin aka Mono. 
    Во фрилансе огромная конкуренция, в основном индусы, в этом плане с Delphi можно быстрее разработать ПО чем предлагают сроки остальные.
    Проблема Делфай в том что оно дорогое, и  не так распространено - (это взаимосвязанный фактор) - таким образом сложно найти команду и мало проектов на нем разрабатывается, меньше сообщество и меньше документации и библиотек с готовыми решения Поэтому для одиночек это больше подходит.
     
    Но конечно нужно смотреть на развитие - вот Токио получилась очень сырым продуктом, я до сих пор на Берлине пишу под 4 платформы, если следующая версия выйдет такой же ультраглючной, то следует задуматься.
    А вообще хороший программист - это тот кто знает несколько языков, не бойтесь учить новое - опыт ускорит разработку с любым инструментом.
  17. Like
    Savage получил реакцию от Rusland в Что невозможно сделать на Delphi для Android?   
  18. Thanks
    Savage получил реакцию от mazayhin в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  19. Like
    Savage получил реакцию от #WAMACO в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  20. Like
    Savage получил реакцию от Rusland в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  21. Like
    Savage получил реакцию от Равиль Зарипов (ZuBy) в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  22. Like
    Savage получил реакцию от Rusland в Изменение стандартного звука а push-уведомлении   
    Нашел место, отвечающее за не правильную реализацию звука в NotificationPublisher.java
    private Builder buildNotification(String msgTitle, String msgText, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
            mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            return mBuilder;
        }
    Виноват mBuilder.setSound(RingtoneManager.getDefaultUri(2));
    буду править и пересобирать fmx.jar
     
     
  23. Like
    Savage получил реакцию от Ingalime в Изменение стандартного звука а push-уведомлении   
    Нашел место, отвечающее за не правильную реализацию звука в NotificationPublisher.java
    private Builder buildNotification(String msgTitle, String msgText, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
            mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            return mBuilder;
        }
    Виноват mBuilder.setSound(RingtoneManager.getDefaultUri(2));
    буду править и пересобирать fmx.jar
     
     
  24. Like
    Savage получил реакцию от krapotkin в Изменение стандартного звука а push-уведомлении   
    Нашел место, отвечающее за не правильную реализацию звука в NotificationPublisher.java
    private Builder buildNotification(String msgTitle, String msgText, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
            mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            return mBuilder;
        }
    Виноват mBuilder.setSound(RingtoneManager.getDefaultUri(2));
    буду править и пересобирать fmx.jar
     
     
  25. Like
    Savage получил реакцию от Равиль Зарипов (ZuBy) в GCMIntentService или Multiline Push and Local Notification   
    Спасибо за труд! Ковыряю сейчас тему изменения звука в push-уведомлении. И, судя по всему, надо патчить этот же исходник.
×
×
  • Создать...