-
Постов
568 -
Зарегистрирован
-
Посещение
-
Победитель дней
57
Активность репутации
-
ENERGY отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS
Можно и удалять. Но тогда не будут работать мои аналитические инструменты - частота запусков приложения, периоды активности и многое другое.
У Равиля запрос добавления токена в базу вот такой:
INSERT INTO PushTokens (`deviceToken`, `deviceID`, `platform`) VALUE ('$deviceToken', '$deviceID', '$platform') ON DUPLICATE KEY UPDATE `deviceToken` = '$deviceToken'"; У меня же он чуть сложнее:
INSERT INTO gcm (`DeviceID`, `DeviceToken`, `City`, `last_update`, `add_date`, `RequestCount`, `Active`) VALUES ('$DeviceID','$DeviceToken','$City',NOW(),NOW(), 1, 1) ON DUPLICATE KEY UPDATE `DeviceToken` = '$DeviceToken', `City` = '$City', `last_update` = NOW(), `RequestCount` = `RequestCount` + 1, `Active` = 1 Таблица выглядит вот так
CREATE TABLE `gcm` ( `id` int(11) NOT NULL AUTO_INCREMENT, `DeviceID` char(32) DEFAULT NULL, `DeviceToken` varchar(255) DEFAULT NULL, `City` varchar(100) DEFAULT NULL, `last_update` datetime DEFAULT NULL, `add_date` datetime DEFAULT NULL, `RequestCount` int(11) DEFAULT '1', `Active` bit(1) DEFAULT b'1', PRIMARY KEY (`id`), UNIQUE KEY `DeviceID_index` (`DeviceID`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=40337 DEFAULT CHARSET=utf8; Т.е. кроме всего прочего я вижу:
Дату-время первого запуска приложения Дату-время последнего запуска приложения Количество запусков приложения Стоит ли еще приложение на этом устройстве (Active) На поле City не обращайте внимание...
-
ENERGY отреагировална krapotkin в Опять про потоки и картинки
потому что мобильная связь это не провод с интернетом. дикие задержки и все время рвется
протоколы обмена с сервером не предусматривают постоянных переподключений
а вот HTTP специально разработан для такого режима
-
ENERGY отреагировална Равиль Зарипов (ZuBy) в [Статья] PHP сервер для рассылки Push на Android и iOS
Лучше каждый раз, потому что не известно из каких данных он генерируется и при этом у него есть срок действия, но хз какой
-
ENERGY отреагировална Kitty в Отправка пуша из консоли firebase
Спасибо получилось.
Для таких не умных как я, которые не понимают, что в консоли FCM надо писать самой:
1. Откройте дополнительные параметры в консоли FCM .
2. В первом поле КЛЮЧ принудительно самостоятельно напечатайте "mеssage" без ошибок в первом поле. В поле напротив напишите текст сообщения.
3. При этом появиться дополнительные поля ввода ниже.
4. В первом новом поле ниже напишите принудительно title без ошибок и напротив в значении ваш текст...
-
ENERGY отреагировална Rusland в Запуск приложения от PUSH-уведомления
Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:
procedure TFormMain.FormActivate(Sender: TObject); var CurNotification : TPushServiceNotification; begin if Length(fPushService.StartupNotifications) > 0 then for CurNotification in fPushService.StartupNotifications do if Assigned(CurNotification) then Memo.Lines.Text := CurNotification.Json.ToJSON; end;
-
ENERGY отреагировална Равиль Зарипов (ZuBy) в TCombobox как изменить цвет прямоугольника выделения и цвет RadioButton в его же popup списке
Это нативный пикер, он не стилизуется из FMX. Нужно использовать xml стили для кастомизации, но это не точно
-
ENERGY получил реакцию от Равиль Зарипов (ZuBy) в DisposeOf или Free?
@RoschinSpb
Ну нет же.
В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac) Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV.
А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены. При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы.
Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно. Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign.
Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
-
ENERGY получил реакцию от #WAMACO в DisposeOf или Free?
@RoschinSpb
Ну нет же.
В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac) Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV.
А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены. При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы.
Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно. Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign.
Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
-
ENERGY получил реакцию от RoschinSpb в DisposeOf или Free?
@RoschinSpb
Ну нет же.
В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac) Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV.
А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены. При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы.
Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно. Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign.
Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
-
ENERGY получил реакцию от Anatoliy в TColorAnimation вообще работает с кнопками??
Чтобы помигать кнопкой или любым другим контролом, для привлечения внимания я делаю так:
Добавить на кнопку TGlowEffect, установить нужный цвет. Внутрь TGlowEffect добавляю TFloatAnimation . В нем выбираю PropertyName = Opacity. Дальше устанавливаю Start и Stop 0 и 1. AutoReverse := true; Loop := true; Duration (0.3)
Все.
В коде включаем :
GlowEffect.Enable := true и FloatAnimation.Enable := true - заставит пульсировать кнопку.
Например так:
procedure TfrmMain.PulseEMRGButton; begin GlowBtnEMRGNum.Enabled := true; animGlowBtn.Enabled := true; TThread.CreateAnonymousThread(procedure begin Sleep(1250); // general duration TThread.Queue(nil, procedure begin animGlowBtn.Enabled := false; GlowBtnEMRGNum.Enabled := false; end); end).Start; end;
Ксати Major переименуйте тему в "Пульсирующая кнопка".
-
ENERGY отреагировална krapotkin в Поочередная загрузка изображений в TImage
с учетом Thread и Synchronize тут по сути написано
ListView.Items[id].Bitmap.LoadFromFile(Cache + code + '.png');
-
ENERGY получил реакцию от Andrey Efimov в Простая проверка подключения к интернету перед выполнением IdHTTP1.get
В правой панели выберите платформу Android, а не Windows.
-
ENERGY получил реакцию от Sashar333 в Простая проверка подключения к интернету перед выполнением IdHTTP1.get
В правой панели выберите платформу Android, а не Windows.
-
ENERGY получил реакцию от Brovin Yaroslav в Как получить hwnd контрола ?
В VCL TPanel - это было окно (Window) со своим холстом (DC Canvas). И многие компоненты VCL это обертка над WinAPI - т.е. окна с определенным стилем который предлагает система.
В FMX все отрисовывается собственным фреймворком (мультиплатформа ведь!), собственный рендер, и теперь это не Window, соответственно у него нет дескриптора, как и у всех остальных визуальных компонентов FMX, кроме формы.
Расскажите лучше что вам нужно сделать.
-
ENERGY отреагировална AliZairov в Native Android VideoView
Привет, Готовы,
unit VideoView; interface uses System.SysUtils, FMX.Types, FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.Net, Androidapi.JNI.VideoView, Androidapi.JNI.Widget; type TVideoView = class(TObject) private FDialog: JDialog; FVideoView: JVideoView; public procedure Play(Source: string); end; implementation { TVideoView } procedure TVideoView.Play(Source: string); begin CallInUIThread( procedure begin FDialog := TJDialog.JavaClass.init(TAndroidHelper.Activity, -1); FDialog.setCancelable(True); FVideoView := TJVideoView.JavaClass.init(TAndroidHelper.Activity); FVideoView.setVideoURI(StrToJURI(Source)); FVideoView.start; FDialog.setContentView(FVideoView); FDialog.show; end); end; end. -
ENERGY получил реакцию от #WAMACO в DisposeOf или Free?
Вот эту еще почитайте статью, мне она больше понравилась.
http://www.gunsmoker.ru/2013/05/modern-delphi.html
Проблема DisposeOf в том, что он не освобождает память, а просто вызывает деструктор (к классу потом можно обратиться, и не будет Access Violation).
На моб. платоформах я обычно иcпользую Free как и раньше, иногда FreeAndNil (если необходимо) т.к. на моб. платформах в отличии от десктопных платформ, вызов Free работает по другому . Если зайти в тело метода там будет комментарий:
// under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear В случае моб. платформ - Free обнуляет переменную, уменьшает ARC на единицу, затем проверяет счетчик ARC и если он = 0 - то вызывает деструктор.
Если объект где то присваивался, в какую либо еще переменную, и переменная не была обнулена, то его счетчик ссылок ARC > 0, то он не освободиться с вызовом Free, на эту тему есть баг (фича?) с reference procedure, который вроде уже исправили в Токио (я не проверял, т.к. пока токио нормально не работает под Android).
А вот в случае с визуальными контролами, если нужно убрать контрол, надо использовать DisposeOf иначе он останется на форме (может кто знает как его убрать при помощи Free, что и где обнулить? ).
-
ENERGY отреагировална Mars M в 2D<>3D координаты
В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
https://yadi.sk/d/KVJFHajd3J9ALD
Projects.rar
-
ENERGY получил реакцию от Astghik в Проверить состояние сети
Вот вариант предложенный Равилем (я его немного изменил):
Кстати на Android есть методы ОС для этого, они гораздо быстрее.
uses System.Net.HttpClient
function CheckInternet: boolean; begin Result := false; with THTTPClient.Create do try try Result := Head('http://google.com').StatusCode < 400; except end; finally Free; end; end;
-
ENERGY получил реакцию от Anatoliy в Печать с планшета
А это читали? Google CloudPrint
https://community.embarcadero.com/blogs/entry/printing-from-an-android-device-using-firemonkey-272
-
ENERGY получил реакцию от Rusland в 2D<>3D координаты
Кстати на гитхабе есть ветка с примерами программ, которых нет в Samples в последних версиях Delphi (часть примеров удалили в новых версиях), и там встречаются интересные примеры, втч. и связанные с 3D.
Может это вам поможет. https://github.com/FMXExpress/Firemonkey/tree/master/Embarcadero
Я бы на вашем месте скачал все примеры, распаковал их, а затем в Total Commander запустил бы поиск по тексту в *.pas файлах, например 'TViewport3D'
-
ENERGY получил реакцию от #WAMACO в Кнопка изменяющая размеры относительно текста
Имхо BeginUpdate\EndUpdate тут лишние. Здесь одна операция, а не несколько.
И лучше это будет сделать в OnResize кнопки.
-
ENERGY получил реакцию от Kitty в Автоматизация работы со стилями
Вы бы рассказали что там происходит в ролике, а то не у всех есть лишние 40 минут.
Offtop
Есть один отличный прием, о котором мало кто знает.
Если вам нужно поработать со стилем от моб. платформы на Windows (так гораздо быстрее программировать и отлаживать GUI) - можно просто открыть в текстовом редакторе style файл, найти в нем строку platform и заменить ее с напр. ANDROID на MSWINDOWS, сохранить, а затем загрузить в текущий Default стиль.
-
ENERGY получил реакцию от Kitty в Сортировка TListViewItems
Что то я не понял в чем проблема у автора.
Стандартный метод сортировки работает (Delphi Berlin).
uses System.Generics.Defaults; ... procedure TForm1.ButtonSortClick(Sender: TObject); var Comparer: IComparer<TListViewItem>; begin Comparer := TDelegatedComparer<TListViewItem>.Create( function(const LeftItm, RightItm: TListViewItem): Integer begin Result := CompareText(LeftItm.Text, RightItm.Text); end); ListView1.Items.Sort(Comparer); end; А также можно по Data
procedure TForm1.ButtonSortClick(Sender: TObject); var Comparer: IComparer<TListViewItem>; begin Comparer := TDelegatedComparer<TListViewItem>.Create( function(const LeftItm, RightItm: TListViewItem): Integer begin Result := 0; //no change if LeftItm.Data['number'] > RightItm.Data['number'] then Result := 1 //depend on sort order asc/desc else if LeftItm.Data['number'] < RightItm.Data['number'] then Result := -1; //depend on sort order asc/desc end); ListView1.Items.Sort(Comparer); end;
Не забудьте BeginUpdate - EndUpdate.
Напомню что к объектам ListViewItem можно обращаться не через Data['name'], а напрямую через индексы, что гораздо быстрее, т.к. не нужно сравнивать все строки в цикле, это важно при большом количестве Objects per Item (напр. больше 5 в режиме DynamicAppearance).
-
ENERGY отреагировална Andrey Efimov в Исключить устройства с Intel Atom как не поддерживаемые
Оф. справка: Workaround for Android 4.0/Kindle Fire Message: "Application does not support this device"
-
ENERGY отреагировална krapotkin в Исключить устройства с Intel Atom как не поддерживаемые
там стоит заглушка, которая выводит надпись "ваша платформа не поддерживается, до свидания"
но факт в том, что на большом кол-ве интел стоит библиотека houdini которая поддерживает запуск программ, написанных для ARM
в результате и ваша программа тоже имеет шанс запуститься. поэтому, убрав эту птицу, вы можете "без программирования", как это принято в RAD Studio ))) получить хороший результат )))