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

Rusland

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

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

  • Посещение

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

    26

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

  1. Like
    Rusland отреагировална CyberStorm в Что невозможно сделать на Delphi для Android?   
    ААА Жиза))) Я думал один такой) Сорри за флуд)
    2. Нет возможности работы с запароленными zip-архивами
    3. Сложно создавать стабильно работающие приложения (как раз предыдущий пост об этом)
  2. Like
    Rusland отреагировална krapotkin в Использование GameAudioManager.pas   
    ну и хорошая идея вместо обвешивания {DEFINE} в одном файле сделать базовый класс и двух наследников раскидать по модулям xxx.android.pas и xxx.ios.pas
    и в конечном файле просто uses {$IFDEF android} xxx.android.pas {$endif} {$ifdef ios} xxx.ios.pas {$endif}
  3. Like
    Rusland отреагировална krapotkin в Парсинг XML файла   
    ну, откройте же хоть какой-то проект, а потом посмотрите сюда же. пункт XML появится...
  4. Like
    Rusland отреагировална Евгений Корепов в THTTPClient асинхронность   
    Var FIAsyncResult : IAsyncResult; procedure DoEndDownload(const ASyncResult: IAsyncResult); .... FHTTPClient:=THTTPClient.Create; FHTTPClient.ResponseTimeout:=FResponseTimeout; FHTTPClient.ConnectionTimeout:=FConnectionTimeout; FIAsyncResult:=FHTTPClient.BeginGet(DoEndDownload, 'https://.....'); procedure TServiceData.DoEndDownload(const ASyncResult: IAsyncResult); Var LAsyncHTTPResponse : IHTTPResponse; begin try LAsyncHTTPResponse:=THTTPClient.EndAsyncHTTP(AsyncResult); except on E:Exception do AErrorMessage:=E.Message; end; if Assigned(LAsyncHTTPResponse) then begin if LAsyncHTTPResponse.StatusCode = 200 then S:=LAsyncHTTPResponse.ContentAsString; ....  
  5. Like
    Rusland отреагировална Кривяков Виталий в Асинхронный NetHTTPClient   
    Добрый день!
    Все проще, гораздо.
      Net := THTTPClient.Create;
      Net.BeginPost(
        procedure (const Value : IAsyncResult)
        begin
          AsyncResult(Value); // Вот тут можно вызвать любую процедуру, или просто обработать результат.
        end, URL, InputStream, OutputStream, Headers);
    В анонимной процедуре просто вызываете нужную процедуру, для интерактивной одну, для периодических запросов другую.
  6. Like
    Rusland отреагировална Fedor K в THTTPClient асинхронность   
    Что конкретно печально в асинхронности клиента? На какой платформе? Если с примером - то вообще замечательно.
    п.с. Еще раз повторю, что нареканий со стороны работы асинхронности не было замечено в течении года в нагруженном мобильном приложении на обоих осях, Delphi Berlin Update 2.
     
  7. Like
    Rusland отреагировална ENERGY в THTTPClient асинхронность   
    Лучше использовать потоки, т.к. сейчас все моб. девайсы имеют многоядерные процессоры.
    TThread.CreateAnonymousThread(     procedure     begin // код       TThread.Queue(nil,         procedure         begin //   здесь код выполнится только по окончании работы потока (отложенный), в главном потоке. // здесь можно работать с формой.         end);     end   ).Start;
     
    TThread.CreateAnonymousThread(procedure ()   begin                   TThread.Synchronize (TThread.CurrentThread,           procedure ()           begin   // код выполнится в главном потоке, - к примеру чтобы показать прогресс на форме. и затем   //  поток продолжит работу.           end);   end).Start;  
    Всегда помните что нельзя работать с формой из других потоков, без методов синхронизации.
    Только в главном, иначе будут случайные AV ошибки.
    Еще почитайте.
    http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
     
  8. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в КазТемирЖолы. Расписание поездов   
    Автор: Зарипов Равиль (ZuBy)
    Ссылка на приложение: Офф. сайт
     
     





  9. Like
    Rusland отреагировална Yarpda в Узнать отображаемый размер видео на контроле Mediaplayer   
    В копилку знаний. Напишу как решил задачу. Может кому-то будет интересно.
    Таких как мне надо параметров у  MediaPlayer'a конечно нет. Но есть свойство VideoSize.X и Y там можно посмотреть реальный размер воспроизводимого видео в пикселях. 
    Берем эти значения, делим высоту на ширину и выясняем астект (соотношение сторон). После чего берем ширину контейнера в котором отображает видео на форме и умножаем на этот аспект. Получаем нужную высоту контейнера. В итоге если у вас контейнер видео с привязкой Top, Bottom то его размер всегда будет пропорционально равным размеру проигрываемого видео-файла, что избавит от ненужный черных рамок.
     
  10. Like
    Rusland отреагировална #WAMACO в Delphi 10.2.3, AdBanner, Java, trouble   
    embarcadero выпустили патч исправляющий эту ошибку
    RAD Studio 10.2.3 Android Push Notification Patch
    This patch resolves an issue with push notifications on Android due to missing files.
    It fixes the following publicly reported issue: RSP-20137
    English, French, German and Japanese
    Available only to registered users of RAD Studio, Delphi, C++Builder 10.2 (Professional or higher) and All-Access
  11. Like
    Rusland отреагировална haword в [Android] Есть ли разница под каким SDK собрано приложение   
    да нет, гугль заставляет программистов в своем приложении поддерживать все функции новых АПИ, но при этом если они захотят предоставлять совместимость со старыми версиями АПИ то пускай делают что то типа развилок в программах - если апи такое то такая функция а если такое то такая. что бы при запуске на новых версиях ос программы не падали. видать в следующих апи хотят полностью избавиться от устаревших вызовов функций. 
  12. Like
    Rusland отреагировална 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
  13. Like
    Rusland отреагировална Savage в Изменение стандартного звука а 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
     
     
  14. Like
    Rusland отреагировална sinuke в MapView рушит приложение в Tokyo 10.2.3   
    В чате проскакивал вопрос по пушам в 10.2.3. Ярослав говорил, что забыли "положить" в новом релизе какую-то либу с сервисами гугла. Может быть и карты на этой либе завязаны...
  15. Like
    Rusland отреагировална enatechno в RAD Studio 10.2.3 Когда и чего ждать?   
  16. Haha
    Rusland отреагировална krapotkin в [Вебинар] FGX Native. Новейшая кроссплатформенная платформа для мобильной разработки на Delphi   
    FMX будет развивать Embarcadero т.к. это и есть их продукт
    FGX будет жить отдельно, пока эмро не сочтет его "убийцей айфонов" и не перекупит на корню. А до этого еще ох как далеко
  17. Like
    Rusland отреагировална AliZairov в Native Android VideoView   
    Здравствуйте. К сожалению, есть некоторые ошибки.

    1) К сожалению, компонент Align и Anchor не реагирует.
    2) Распространяйте объекты в Layouta и это не работает должным образом.
    3) Если размер видео небольшой, он остается черным, как на картинке.
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, FScreenService) then FScale := FScreenService.GetScreenScale else FScale := 1; procedure Load; begin {$IFDEF ANDROID} CallInUIThreadAndWaitFinishing( procedure begin { VideoView } FJVideoParams := TJViewGroup_LayoutParams.JavaClass.init(Round(Width * FScale), Round(Height * FScale)); FJVideoView := TJVideoView.JavaClass.init(TAndroidHelper.Context); FJVideoView.setLayoutParams(FJVideoParams); FJVideoView.setBackgroundColor(TJColor.JavaClass.BLACK); if Visible = True then begin Visible := False; FJVideoView.setVisibility(TJView.JavaClass.VISIBLE); end else begin FJVideoView.setVisibility(TJView.JavaClass.INVISIBLE); end; { Control } FJNativeLayout := TJNativeLayout.JavaClass.Init(TAndroidHelper.Activity, MainActivity.getWindow.getDecorView.getWindowToken); FJNativeLayout.setControl(FJVideoView); FJNativeLayout.setPosition(Round(Position.X * FScale), Round(Position.Y * FScale)); FJNativeLayout.setSize(Round(Width * FScale), Round(Height * FScale)); end); {$ENDIF} end; // http://techslides.com/demos/sample-videos/small.3gp 4) Trackbar не меняет позицию.
    procedure TMain.TrackBar1Change(Sender: TObject); begin Label1.Text := MSToTime(TrackBar1.Value); //V.setPosition(TrackBar1.Value); // Когда вы его активируете, это создает проблемы. end;
  18. Like
    Rusland отреагировална Brovin Yaroslav в [Вебинар] FGX Native. Новейшая кроссплатформенная платформа для мобильной разработки на Delphi   
    Тема: FGX Native. Новейшая кроссплатформенная платформа для мобильной разработки на Delphi Дата и время: 27 марта 2018 года в 12:00 Участники: @Brovin Yaroslav, Андрей Совцов Регистрация: ссылка Ссылка на официальный телеграмм канал: https://t.me/fgx_native Участие бесплатное На вебинаре познакомимся с текущей разработкой новой кроссплатформенной платформы, позволяющей создавать нативные приложения с быстрым откликом, плавной анимацией, продвинутой системой выраванивания, поддержкой RTL языков, оптимизированной работой с изображениями, быстрой канвой и многим другим. RAD Studio, Android/iOS В вебинаре принимает участие автор разработки Ярослав Бровин
     





  19. Like
    Rusland отреагировална sinuke в Монетизация TBannerAd   
    считать можно. там вроде есть событие onClick - там и можно считать.
    но за клик никаких баллов (пусть и внутри только приложения) начислять нельзя - это прямо противоречит правилам программы AdSense и AdMob. за это забанят пожизненно и никакая апелляция не поможет.
    плюс могу забанить за недействительные клики, когда с одного устройства будет много кликов (накрутка). даже если это сделает ваш конкурент - вас могут забанить. забанить могут даже за частые показы на одном и том же устройстве. поэтому показ и клики нужно продумать - допустим не более 10 показов и не более 5 кликов за сеанс. Нужно себя обезопасить, чтобы потом можно было доказать Гуглу, что вы настроены на честный зароботок
     
    п.с. в AdMob есть видеореклама с вознаграждением. вот за просмотр (!) этой рекламы можно будет начислять какие-то баллы. но TBannerAd ее не поддерживает (как и модуль, который тут есть для межстраничной рекламы)
  20. Like
    Rusland отреагировална Tumaso в Управление окном заставки   
    Изменить главную форму можно простым Application.MainForm := fmMain;
  21. Like
    Rusland отреагировална x11 в Управление окном заставки   
    Может кому пригодится.
    1. В приложении по умолчанию главной формой, т.е. формой, которая автоматически создается при старте, является форма логина. Т.е. именно она появляется первой.
    2. В форме логина уже во время исполнения программы, подменяем форму логина на ту, которая должна теперь считаться главной.
     
    procedure SetAsMainForm(aForm:TForm); var P: Pointer; begin P := @Application.Mainform; Pointer(P^) := aForm; end;  
    когда проверили логин/пароль и убедились, что пользователь авторизован, создаём форму и делаем её главной, а форму логина закрываем:
    procedure TfmLogin.btnOkClick(Sender: TObject); begin if edPass.Text = qUserspassword.AsString then begin UserData.ID := qUsersid.AsInteger; UserData.Name := qUsersname.AsString; UserData.Group := qUsersid_group.AsInteger; fmMain := TfmMain.Create(Application); fmMain.Show; SetAsMainForm(fmMain); close; end else begin lbInfo.Text := 'Ошибка. Пароль неверный.'; end; end;  
  22. Thanks
    Rusland получил реакцию от x11 в Перехват события звонка   
    Вот пример, из которого вы можете видеть как перехватывать звонки (добавьте на форму Memo)
     
    uses CSBroadcastReceiver, Androidapi.JNI.JavaTypes.Own, Androidapi.Jni, AndroidApi.JNI.GraphicsContentViewText, Androidapi.Jni.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge, Androidapi.JNI.Telephony, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, FMX.StdCtrls; private { Private declarations } procedure CreateBroadcastReceiver; procedure BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); procedure CheckPhoneCallState(Context: JContext; Intent: JIntent); procedure CheckSmsInState(Context: JContext; Intent: JIntent); function KillCall(Context: JContext): Boolean; public { Public declarations } end; var Form1: TForm1; BroadcastReceiver: TCSBroadcastReceiver; implementation uses Androidapi.Jni.App, Androidapi.Helpers, Androidapi.Log; procedure TForm1.CreateBroadcastReceiver; begin if not Assigned(BroadcastReceiver) then begin BroadcastReceiver:= TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive:= BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Add('android.intent.action.PHONE_STATE'); BroadcastReceiver.Add('android.intent.action.NEW_OUTGOING_CALL'); end; end; procedure TForm1.CheckPhoneCallState(Context: JContext; Intent: JIntent); var telephonyService: JObject; telephonyManager: JTelephonyManager; state: JString; incomingCallNumber: string; outgoingCallNumber: string; outputResult: string; begin outputResult:= #13#10; telephonyService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); if JStringToString(Intent.getAction).Equals('android.intent.action.PHONE_STATE') then begin state:= Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_STATE); if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_IDLE) then outputResult:= outputResult + 'Phone is IDLE ' + #13#10 else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_RINGING) then begin incomingCallNumber:= JStringToString(Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_INCOMING_NUMBER)); if incomingCallNumber.Equals('') then incomingCallNumber:= 'PRIVATE NUMBER'; outputResult:= outputResult + 'Phone is RINGING' + #13#10; outputResult:= outputResult + 'Incoming call from ' + incomingCallNumber + #13#10; if incomingCallNumber = '+79391234567' then /// телефон в черном списке // тут отбиваем звонок end else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_OFFHOOK) then outputResult:= outputResult + 'Phone is OFFHOOK' + #13#10; end else if JStringToString(Intent.getAction).Equals('android.intent.action.NEW_OUTGOING_CALL') then begin outgoingCallNumber:= JStringToString(Intent.getStringExtra(TJIntent.JavaClass.EXTRA_PHONE_NUMBER)); outputResult:= outputResult + 'Outgoing call to ' + outgoingCallNumber + #13#10; if outgoingCallNumber = '+79051234567' then /// телефон в черном списке begin BroadcastReceiver.SetResultData(nil); outputResult:= outputResult + 'Call is not allowed to ' + outgoingCallNumber + #13#10; end; end; Memo1.Lines.Append(outputResult); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(BroadcastReceiver) then BroadcastReceiver.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin CreateBroadcastReceiver; end; Отправить на PHP сервер можно, например, через Indy компоненты.
  23. Like
    Rusland получил реакцию от Alisson R Oliveira в TMapsEngine   
    enatechno, kitty спасибо. Уже выложили. 
     
    Даже ZuBy там засветился c TMapsEngine  
  24. Like
    Rusland получил реакцию от d7d1cd в как показать сообщение?   
    Хм, действительно. Так давно он у меня в проекте, что стал думать что он стандартный ) Однако он маленький и не требует установки, достаточно скопировать в свой проект.
    Вот он, если нужно.
  25. Like
    Rusland отреагировална ENERGY в Подскажите необходимое железо для разработки под iOS   
    Я пишу на Delphi под iOS без мака.
    Что понадобится:
    1. Процессор Intel, не AMD. Т.к. MacOS работает под Intel.
    2. VMware + образ с установленной MAcOS.
    3. iPhone 5s или выше. Т.к. начиная с iPhone 5s процессор стал x64. Сейчас публиковать нужно обязательно x64. iPhone 5 версия - x32.   Телефон можно купить б\у.
    Идешь на рутрекер и скачиваешь Vmware образ с уже установленным MacOs Sierra. Также читай инструкции, - нужно пропатчить VMware - т.к. по дефолту возможность работы с OSX там отключена.
    Дальше присоединяшь телефон к компу, и Vmware определяет этот телефон. Дальше все по инструкции EMBT. 
    Да кстати, желательно не обновлять телефон до версии iOS 11 - к примеру у меня на Berlin были проблемы с этим SDK - поэтому я сейчас компилю проект на 10 SDK (при этом телефон остался на 11).
    Итого все компилиться, и работает Debug - кстати он гораздо быстрее  чем Android отладка.
    Да не забудьте купить аккаунт разработчика Apple - 100$ в год. Без него будет куча проблем с настройкой. Есть временный бесплатный сертификат на 5 дней (работает в течении 5 дней, затем нужно делать ребилд) - для этого можно запустить Xcode и создать и запустить пустой проект, но лучше сразу купить платный - будет меньше проблем.
     
     
×
×
  • Создать...