Tumaso
-
Постов
331 -
Зарегистрирован
-
Посещение
-
Победитель дней
39
Активность репутации
-
Tumaso получил реакцию от Ingalime в В 10.2 работает, а в RIO зависает при присвоении медиа-файла
TMediaPlayer в android и ios вообще никогда стабильно не работал, и targetSDK тут даже не причем. Он кривой сам по себе изначально, смиритесь.
Стабильное решение медиаплейера есть в библиотеке alcinoe, но там поддерживается пока только tokyo, поддержка rio будет позже.
-
Tumaso получил реакцию от Yarpda в В 10.2 работает, а в RIO зависает при присвоении медиа-файла
TMediaPlayer в android и ios вообще никогда стабильно не работал, и targetSDK тут даже не причем. Он кривой сам по себе изначально, смиритесь.
Стабильное решение медиаплейера есть в библиотеке alcinoe, но там поддерживается пока только tokyo, поддержка rio будет позже.
-
Tumaso отреагировална Brovin Yaroslav в С днем рождения Андрей Ефимов ???
Хочу от всей души поздравить с днем рождения нашего модератора Андрея Ефимова @Andrey Efimov. Человек, на которого можно положиться и который всегда готов прийти на помощь. Из года в год помогает нашему форуму становиться лучше.
С днем рождения! Успехов тебе в работе, в личных делах. И не забывать про Делфи!
-
Tumaso получил реакцию от Anatoliy в Обновить приложение
@Anatoliy
разобрался? после Google Play быстро забываешь, что в AppStore (как и во всех продуктах Apple) ВСЁ через заднее место.
Для уже опубликованных приложений в appstore обновление получается нужно через создание новой версии делать, а не через удаление текущей сборки.
-
Tumaso отреагировална jornada в Доступ к Yandex.Disk
Лучше поздно, чем никогда) Например так
// RESTRequest1.AddFile(FileName);
AStream := TMemoryStream.Create();
AStream.LoadFromFile('D:\1.mp4');
RESTRequest1.AddBody(AStream, ctVIDEO_MP4);
-
Tumaso получил реакцию от Anatoliy в Обновить приложение
@Anatoliy
сначала удалите текущую версию - мышкой подвести к колонке даты/времени текущей сборки, появится круглая красная иконка удаления. нажать и сборка удалится.
после этого выбрать новую сборку - там и будет ваша новая версия. выбираете ее и отправляете на проверку
-
Tumaso получил реакцию от Anatoliy в Обновить приложение
@Anatoliy
сорри, я видимо наверное не правильно понял тебя. В консоли AppStore, когда загружаешь новую версию, нужно старый пакет удалить и там же выбрать пакет с новой версией. После этого отправляешь на проверку.
После проверки, если она будет успешна, приложение обновится в магазине AppStore. Клиентам же оно попадет не сразу, тут нужно будет просто подождать.
-
Tumaso отреагировална Slym в Артефакты на экране (Android)
Боролись как-то с артефактами отображения (мы их прозвали "крокодилами" из-за сходства на первом скриншоте с этим багом)...
Могли отображаться также левые спрайты, или обрезки скролившихся контролов...
Коллега выяснил что не надо трогать Form.Fill, из-за переключения в недрах FMX нативной и не нативной канвы: если нужен фон - брось Rect по контенту и в нем делай заливку...
-
-
Tumaso отреагировална FeLDMARShaL в [iOS] Полноценная фоновая работа приложения
Расскажу о том как я добился нормальной фоновой работы приложения. В моем понимании нормальная фоновая работа приложения - это сохранять геокоординаты и систематически (по мере их накопления передавать на сервер). По сути у нас получился трекер. Те кто считают что iOS такое не умеет делать, и все что будет написано ниже это фейк лучше закройти эту тему. Итак начнем, по пунктам:
1) Добавляем к проекту ключ NSLocationAlwaysAndWhenInUseUsageDescription - для новых иОС это обязательно, начиная с 11 или 12 версии уже не помню
2) Сообщаем приложению о намерении что мы будем использовать геокоординаты в фоне (редактируем ключ UIBackgroundModes выставляя галочку напротив location)
3) Далее для того чтобы не поломать другие приложения которые используют геолокацию создаем специальную дерективу, которая будет сообщать о том что наше приложение будет использовать геолокацию в фоне, я ее назвал iOS_RequestAlwaysAuthorization
4) Дальше намного сложнее, нам нужно исправить исходники самой Delphi, а именно System.iOS.Sensors. Изменять будем процедуру TiOSLocationSensor.DoStart, все что отличается от стандартного у меня в рамках описания моей директивы:
function TiOSLocationSensor.DoStart: Boolean; var I: Integer; begin {$ifdef iOS_RequestAlwaysAuthorization} if TOSVersion.Check(8) and (FLocater <> nil) then FLocater.requestAlwaysAuthorization; {$else iOS_RequestAlwaysAuthorization} if TOSVersion.Check(8) and (FLocater <> nil) then FLocater.requestWhenInUseAuthorization; {$endif iOS_RequestAlwaysAuthorization} // check authorization if Authorized = TAuthorizationType.atUnauthorized then SensorError(SLocationServiceUnauthorized); // check if location sensor is enabled if not FLocater.locationServicesEnabled then SensorError(SLocationServiceDisabled); // start location updates if (LocationChange = TLocationChangeType.lctLarge) and CanUseSignifChangeNotifs then FLocater.startMonitoringSignificantLocationChanges else FLocater.startUpdatingLocation; // start heading updates if CanUseHeading then begin FLocater.startUpdatingHeading; end; // start monitoring regions if CanMonitorRegions then for I := 0 to Regions.Count - 1 do FLocater.startMonitoringForRegion(ConvLocationRegion(Regions[I])); Result := FLocater.locationServicesEnabled; if Result then Result := Authorized = TAuthorizationType.atAuthorized; {$ifdef iOS_RequestAlwaysAuthorization} FLocater.setAllowsBackgroundLocationUpdates(True); FLocater.setPausesLocationUpdatesAutomatically(False); {$endif iOS_RequestAlwaysAuthorization} end; Собственно усе, можно наслаждаться фоновой работой. Все это работает под Delphi 10.2.3. На телефоне iPhone 6s под управлением iOS 11. Как было сказано выше, работает как геолокация так и инет и вообще все остальные процессы внтури приложения, такие как TTimer
Собственно вот результат данного трекера:
Если приблизить то можно увидеть насколько точно и часто он обновляет координаты:
И да, огромное спасибо человеку с ником Artyom Karapetyan, именно он натолкнул на мысль того как надо правильно все сделать
-
Tumaso получил реакцию от Barbanel в Http client server
вы хотите, чтобы чат был написан для вас без вашего участия?)
-
Tumaso отреагировална Alex7wrt в Передача звука с микровона в потоке от клиента серверу
Когда-то приводил пример в другой теме, но он на Delphi
-
Tumaso получил реакцию от Sergionn в ErrorSoft TurboUpdate - Автообновление ваших Windows приложений
Ничего личного, но само название ErrorSoft как бы намекает....
-
Tumaso получил реакцию от Anatoliy в API level 26 ??? Всё таки как выложить приложение на Play Market?
@Yuriy2606, нужно динамически запрашивать необходимые разрешения у пользователя.
Наверное, правильнее будет установить 10.3 CE, там поддержка получения разрешений идет из коробки (модуль System.Permissions). Плюс 10.3 поддерживает android 9
Что касается получения ключа, то проверьте, что у вас в hosts и нет ли блокировки доступа bds.exe к Интернет на уровне антивируса
-
Tumaso отреагировална sinuke в [Android] Прозрачный StatusBar в RAD 10.3 Rio
Привет
Вчера была выпущена финальная версия RAD Studio 10.3 Rio, в которой много нововведений для Андройд. Но вот про статусбар снова "забыли". Хотя не совсем, добавили файлик styles-v21.xml, который превносит новую материальную тему на устройствах под управлением Android 5.0 и выше вместо устаревшей Holo.
Но все равно свойство формы SystemStatusBar так и не реализовали. Поэтому при запуске статус бар будет окрашен в унылый серый цвет (см. скриншот).
Для того, чтобы сделать статусбар прозрачным и поместить под него содержимое формы, то достаточно сделать несколько несложных шагов:
1. Убираем из деплоймента (Project -> Deployment) файл styles-v21.xml (можно просто снять галочку рядом с именем файла)
2. Добавить в деплоймент проекта новый файл styles-v21.xml (styles-v21.zip) и прописать ему путь res\values-v21\
3. В результате получится следующий вид
P.S. В новом файле по сравнению со стандартным добавилась строчка <item name="android:windowTranslucentStatus">true</item>, которая и отвечает за прозрачный статусбар
P.P.S. Чтобы определять размер статус бара, все также можно воспользоваться решеним ZuBy - http://blog.rzaripov.kz/2016/12/android-ios.html
P.P.P.S. Тестовый проектик - StatusBar.zip
-
Tumaso отреагировална Barbanel в Нарисовать TСontrol без вывода на экран
Попробуйте перед снятием скриншота насильно применять стиль всех для элементов.
Вызывайте для каждого контрола процедуру ApplyStyleLookup();
-
Tumaso получил реакцию от Anatoliy в Андроид. Не удаётся установить приложение.
Удалите вручную приложение с телефона перед установкой новой версии.
Можно еще попробовать установить -cleaninstall в Run->Parameters, далее в появившемся диалоге в дереве слева выбираете Debugger, справа в поле Parameters и указываете -cleaninstall
-
Tumaso получил реакцию от Maka в Скриншот без компрессии
Попробуй вместо своей функции вызвать ACntrl.MakeScreenshot
-
Tumaso отреагировална kami в Delphi 10.1 FMX android данные с сервера в base64 закодирован хранится pdf как его раскодировать и сохранить на устройстве
А в чем загвоздка?
Достать поле из JSON - вроде просто, обычная работа с JSON далеко не самой сложной структуры.
Раскодировать из Base64 - uses System.NetEncoding; TNetEncoding.Base64.DecodeStringToBytes и сохранить их в файл
Потом открыть файл через интент.
-
Tumaso отреагировална dnekrasov в Перехват сообщений в Windows
Делаем как обычно, если надо переопределить какое-то событие окна
interface uses {$IFDEF MSWINDOWS} Winapi.Windows, Winapi.Messages, FMX.Platform.Win, {$ENDIF} System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TMainForm = class(TForm) private procedure CreateHandle; override; {$IFDEF MSWINDOWS} procedure WMIMENotify(var Msg: TMessage); message WM_IME_NOTIFY; {$ENDIF} public end; var MainForm: TMainForm; implementation {$R *.fmx} {$IFDEF MSWINDOWS} var OldWndProc: Pointer = nil; function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; var Mess : TMessage; begin case Msg of WM_IME_NOTIFY: begin Mess.Msg := Msg; Mess.WParam := wParam; Mess.lParam := lParam; Mess.Result := 0; MainForm.Dispatch(Mess); Result := Mess.Result; end; else Result := CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; end; {$ENDIF} { TMainForm } procedure TMainForm.CreateHandle; begin inherited CreateHandle; {$IFDEF MSWINDOWS} OldWndProc:= Pointer(SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_WNDPROC, Integer(@NewWndProc))); {$ENDIF} end; {$IFDEF MSWINDOWS} procedure TMainForm.WMIMENotify(var Msg: TMessage); begin {что-то делаем} end; {$ENDIF}
-
Tumaso отреагировална ENERGY в В Embarcadero отсутствует Android Service
Совет. Не пишите под Android на Delphi ниже последней версии Берлина (10.1 upd 2).
А если выше, то точно не Токио первых версий, только последние версии Токио, иначе все будет тормозить и глючить.
-
Tumaso получил реакцию от Anatoliy в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку
На stackoverflow описано решение этой проблемы. Суть в том, что мы принудительно заставляем Indy использовать OpenSSL вместо BorinSSL:
1. добавляем в project deployment для андроида 2 файла: libcrypto.so и libssl.so (взять их можно на https://forums.embarcadero.com/thread.jspa?threadID=211147), в качестве Remote path для обоих файлов указываем .\assets\internal
2. убеждаемся, что в .dpr модуль System.StartUpCopy указан самым первым
3. при запуске приложения вызываем IdOpenSSLSetLibPath(TPath.GetDocumentsPath)
примечание к версии SSL - на файлы по ссылке из п.1 Google не выдает предупреждений, а на более старые версии будет ругаться
-
Tumaso получил реакцию от dnekrasov в [DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку
На stackoverflow описано решение этой проблемы. Суть в том, что мы принудительно заставляем Indy использовать OpenSSL вместо BorinSSL:
1. добавляем в project deployment для андроида 2 файла: libcrypto.so и libssl.so (взять их можно на https://forums.embarcadero.com/thread.jspa?threadID=211147), в качестве Remote path для обоих файлов указываем .\assets\internal
2. убеждаемся, что в .dpr модуль System.StartUpCopy указан самым первым
3. при запуске приложения вызываем IdOpenSSLSetLibPath(TPath.GetDocumentsPath)
примечание к версии SSL - на файлы по ссылке из п.1 Google не выдает предупреждений, а на более старые версии будет ругаться
-
Tumaso отреагировална krapotkin в Непонятный LiveBinding Object
самое правильное по всем статьям просто руками написать загрузку данных в UI, реакцию на изменения в UI и выгрузку данных в МД
времени занимает в 100 раз меньше, чем ловить глюки и отлаживать "технологии"
-
Tumaso отреагировална x11 в Непонятный LiveBinding Object
Я не смотрел проект и буду подсказывать, как.
Просто напишу, что LiveBinding - тормознутая и глючная технология. Разработчики так и не довели её до ума.
Если есть возможность, лучше отказаться от LiveBinding.