Лидеры
Популярный контент
Показан контент с высокой репутацией 09.03.2017 во всех областях
-
Пуш и андроид 6
Евгений Корепов и 2 других отреагировал Дмитрий Ш. за вопрос
по пушам на MIUI лучше почитать на 4pda.ru/ все описано и с картинками )3 балла -
Kitty,а вы попробуйте переустановить свое приложение.Удалить и заново поставить.Получите +1 к пушам. Было 3,станет 4.Больше переустановок,больше пушей. Когда работал с Kinvey была такая же история.В блогах на Embarcadero обсуждали даже.Если в кратце и по памяти,то при переустановке приложения,в Kinvey дублируется запись устройства на которое отправляется push.Что бы избежать этого,надо делать доп проверку на уже существующий токен для данного устройства.Повторюсь что это по памяти,но суть понятна.Можете поискать в блогах Sarina Dupont на Embarcadero. Собственно после этого я и перешел на нативные пуши. Потому как написал многоуважаемый ZuBy: Вот,нашел: https://community.embarcadero.com/blogs/entry/remote-push-notifications-on-android-with-rad-studio-xe6-795 Второй коммент. 15 раз установил,15 пушей.3 балла
-
Форма загрузки
Kitty и 2 других отреагировал Равиль Зарипов (ZuBy) за вопрос
дополню нужно в OnKeyUp главной формы (не первой) обработать vkHardwareBack и сделать Application.Terminate; чтобы при кнопке Назад, не вернуться на форму загрузки (первую форму)3 балла -
первая форма - это главная форма приложения только по архитектуре, а совсем не по смыслу поэтому смело делайте первую форму проще некуда и как только загрузится, сразу можно идти с нее на логин, на основную форму, на регистрацию, рекламу показать, куда угодно....3 балла
-
конечно, в момент старта приложения происходит подписка на получение пушей. но думаю не 4-5 секунд2 балла
-
Как убрать лишние уведомления в шторке при пуше?
Ingalime и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
Если приложение выгружено, то пуши в шторку доставляет гуглосервис.2 балла -
Для работы с Sqlite можете использовать компоненты FireDAC http://docwiki.embarcadero.com/CodeExamples/Berlin/en/FireDAC.SQLite_Sample2 балла
-
Как получить версию APK-файла под Win32?
Равиль Зарипов (ZuBy) и ещё один отреагировал Евгений Корепов за вопрос
Вот так напрямую в память: function ShellExecuteMy(CommandLine: string; AWorkDir: string = 'C:\') : String; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of AnsiChar; BytesRead: Cardinal; WorkDir: string; Handle: Boolean; AOutputLine : String; begin with SA do begin nLength := SizeOf(SA); bInheritHandle := True; lpSecurityDescriptor := nil; end; CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0); try with SI do begin FillChar(SI, SizeOf(SI), 0); cb := SizeOf(SI); dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow := SW_HIDE; // wShowWindow := SW_MINIMIZE; // wShowWindow := SW_NORMAL; hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin hStdOutput := StdOutPipeWrite; hStdError := StdOutPipeWrite; end; WorkDir := AWorkDir; // Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine), Handle := CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, PChar(WorkDir), SI, PI); // Result:=PI; CloseHandle(StdOutPipeWrite); finally CloseHandle(StdOutPipeRead); end; if Handle then try repeat // WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); WasOK := ReadFile(StdOutPipeRead, Buffer, 50, BytesRead, nil); if BytesRead > 0 then begin Buffer[BytesRead] := #0; AOutputLine:=StrOemToAnsi(Buffer); Result :=Result + AOutputLine; end; until not WasOK or (BytesRead = 0); WaitForSingleObject(PI.hProcess, INFINITE); finally CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; finally CloseHandle(StdOutPipeRead); end; end; Функция читает пайп вывода и помещает в строку. P.S. uses Winapi.Windows;2 балла -
Одинаковые логотипы и картинки
Равиль Зарипов (ZuBy) отреагировал Andrey Efimov за вопрос
Раньше точно можно было, если указаны отличия в названии приложений и владельцем приложений является один аккаунт, которым в свою очередь управляет представитель компании (в данном случае медицинского центра) или уполномоченный компанией человек. Тут больше вопрос в авторском праве, если приложение не ваше, а вы скопировали чужой логотип и т.п. то можно нарваться на блокировку за нарушение авторских прав.1 балл -
Поменяйте цвет этих иконок. В любой редакторе можно сдвинуть HUE (я обычно использую Axialis Icon Workshop и Photoimpact) - смещение цветов. И вам будет удобно, и не должны отказать. Можно также поискать Online Image\photo editor - но они как правило очень бедные по функционалу, и там может не быть изменения HUE.1 балл
-
Embarcadero Weekly Round-up for Developers - #8/2017
Kitty отреагировал Brovin Yaroslav за тема
Embarcadero Weekly Round-up 8 Products | Free Tools | Events WEEKLY ROUND-UP FOR DEVELOPERS We continue to improve RAD Studio, Delphi, and C++Builder with one central goal in mind: helping you build cross-platform Native Apps faster than ever before and delivering them to the largest audience possible with ease. InterBase 2017 – Now Available InterBase 2017 delivers the fastest version of InterBase yet with new language features, server wide performance monitoring and enhanced transaction handling. Read More! Download InterBase 2017 Now The trial and developer editions of InterBase 2017 are available for free Download the Trial Version Download Free Developer Edition Build IoT enabled apps with RAD Studio ThingConnect IoT device components range from healthcare devices such as heartrate montiors, blood pressure monitors and scales to home automation gadgets like BLE light bulbs, Z-Wave enabled door locks, smart switches, smoke detectors and more. Read More! Webinar: External BeaconFence Mapping Editor Embarcadero’s BeaconFence technology utilizes its Beacon Fencing Map Editor from the RAD Studio IDE, but is not able to run outside of it. Woll2Woll has created an external mapping editor to create XML mapping files Written 100% with the FireMonkey library - Runs on Windows, iOS, Android, and OSX. Register Now! 16 March 2017 Delphi for Linux Boot Camp Replay Just in case you missed the fantastic Delphi for Linux Boot Camp by Craig Chapman last week, or you want to watch it again, here is the replay that includes Marco Cantu's Q&A at the end. Read More! Delphi for Linux RTL units This blog post from Marco Cantu focuses solely on the RTL units that are going to be available in Delphi for the Linux platform. Read More! Key Traits of the Coming Delphi For Linux Compiler In case you missed it: Here are some of the key technical elements of Embarcadero’s new Delphi compiler for the Linux platform. Read More! How to make a RESTful WebBroker app in C++Builder WebBroker (included in Professional edition and up) makes it easy to build a RESTful server. This article shows you how to server data from a database via a REST API with WebBroker and C++Builder. Register Now Просмотр полной статьи1 балл -
Мой вариант Broadcast Receiver, на мой взгляд наиболее оптимизирован и удачен. По сравнению с известным кодом от barisatalay . Отличия - исправлена утечка, чуть быстрее работает, за счет того что создается один фильтр в него добавляется несколько Actions и одна регистрация на него, нет лишних конвертирований с Jstring to string и обратно, адаптирован под Delphi 10 (JFMXBroadcastReceiver) , упрощена работа с классом (не нужно помнить о регистрации и вызывать ее заранее) , и самое главное - может получать getResultCode текущего ресивера (к примеру он нужен при получении статуса смс сообщения и в других случаях.). unit BroadcastReceiver; interface {$IFDEF ANDROID} uses Androidapi.JNI.Embarcadero, Androidapi.JNI.GraphicsContentViewText, Androidapi.helpers, Androidapi.JNIBridge, FMX.Helpers.Android, Androidapi.JNI.JavaTypes, System.Classes, System.SysUtils; type TBroadcastReceiver = class; TListener = class(TJavaLocal, JFMXBroadcastReceiverListener) private fOwner: TBroadcastReceiver; fReceiver: JFMXBroadcastReceiver; public constructor Create(aOwner: TBroadcastReceiver); destructor Destroy; override; procedure onReceive(context: JContext; intent: JIntent); cdecl; end; TOnReceive = procedure (aContext: JContext; aIntent: JIntent; aResultCode: integer) of object; TBroadcastReceiver = class private fListener : TListener; fRegistered: boolean; fOnReceive: TOnReceive; public constructor Create(aOnReceiveProc: TOnReceive); destructor Destroy; override; procedure AddActions(const Args: array of JString); procedure SendBroadcast(const aValue: string); end; {$ENDIF} implementation {$IFDEF ANDROID} { TBroadcastReceiver } constructor TBroadcastReceiver.Create(aOnReceiveProc: TOnReceive); begin inherited Create; fListener := TListener.Create(Self); fOnReceive := aOnReceiveProc; end; destructor TBroadcastReceiver.Destroy; begin fListener.Free; inherited; end; procedure TBroadcastReceiver.AddActions(const Args: array of JString); var vFilter: JIntentFilter; i: Integer; begin if fRegistered then TAndroidHelper.context.getApplicationContext.UnregisterReceiver(fListener.fReceiver); vFilter := TJIntentFilter.JavaClass.init; for i := 0 to High(Args) do vFilter.addAction(Args[i]); TAndroidHelper.context.getApplicationContext.registerReceiver(fListener.fReceiver, vFilter); fRegistered := true; end; procedure TBroadcastReceiver.SendBroadcast(const aValue: string); var Inx: JIntent; begin Inx := TJIntent.Create; Inx.setAction(StringToJString(aValue)); TAndroidHelper.Context.sendBroadcast(Inx); end; constructor TListener.Create(aOwner: TBroadcastReceiver); begin inherited Create; fOwner := aOwner; fReceiver := TJFMXBroadcastReceiver.JavaClass.init(Self); end; destructor TListener.Destroy; begin TAndroidHelper.context.getApplicationContext.unregisterReceiver(fReceiver); inherited; end; // usually android call it from "UI thread" - it's not main Delphi thread procedure TListener.onReceive(context: JContext; intent: JIntent); begin if Assigned(fOwner.fOnReceive) then fOwner.fOnReceive(Context, Intent, fReceiver.getResultCode); end; {$ENDIF} end. Как использовать // указывать нужно сразу все нужные вам Actions в Add через запятую, не по одной. fBroadcast := TBroadcastReceiver.Create(OnReceiveBroadcast); fBroadcast.AddActions([StringToJString(SENT_ACTION)]); << Custom action ------------- // или например сразу несколько Actions fBroadcast.AddActions([TJIntent.JavaClass.ACTION_SCREEN_OFF, TJIntent.JavaClass.ACTION_SCREEN_ON]);1 балл
-
Пуш и андроид 6
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
У меня андроид 6, опять же проблем нету. манифест правильно настроен?1 балл -
Как убрать лишние уведомления в шторке при пуше?
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
сколько пришло пушей от сервера столько и публикуется в шторку, отсебятину он не добавляет1 балл -
Например так: procedure CreateArhivTables(CreateDatabaseName: string); var TableToCreate: TFDQuery; begin TableToCreate := TFDQuery.Create(nil); TableToCreate.ConnectionName := CreateDatabaseName; try TableToCreate.SQL.Clear; TableToCreate.SQL.Add('create table if not exists Marks(' +' Mark text primary key, ' +' CheckData text);'); TableToCreate.ExecSQL; end;1 балл
-
Project > View Source - и там можете менять очередность запуска форм, или вообще создать одну, а затем подгружать нужные, если их много. Так даже экономней. Установите форме Visible false. А затем когда нужно меняйте на true из формы загрузки.1 балл
-
Форма загрузки
Ingalime отреагировал Равиль Зарипов (ZuBy) за вопрос
а в чем проблема если поставить её первой формой? Как вариант еще использовать фрейм где будет эта самая загрузка1 балл -
Загрузка аудиофайлов в MediaPlayer
Rusland отреагировал Равиль Зарипов (ZuBy) за вопрос
Remote Path неправильно заполнен, должно быть assets\internal1 балл -
Форма не сворачивается при клике на иконке в панели задач
#WAMACO отреагировал Равиль Зарипов (ZuBy) за вопрос
эта старая версия, вот здесь сделал по другому1 балл -
Положу здесь видео, как сертификаты устанавливать1 балл
-
Описание TfgRadioGroup
#WAMACO отреагировал Brovin Yaroslav за тема
Описание Назначение: Компонент предназначен для отображения группы TRadioButton и осуществления выбор. Поддерживает стилизацию. Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\RadioGroupDemo\RadioGroupDemo.dproj Возможности Стилизация через указание двух картинок отображающих голос и пустой голос Настройки отображения заголовка группы TfgRadiouGroup.TextOptions.TitleTextSettings Возможность выбрать настройки отображения заголовка группы из стиля TfgRadioGroup.TextOptions.StyledTitleTextSettings Настройки отображения текста TRadioGroup TfgRadiouGroup.TextOptions.ButtonTextSettings Возможность выбрать настройки отображения текста TRadioGroup из стиля TfgRadioGroup.TextOptions.StyledButtonTextSettings Текущий выбранный вариант TfgRadioGroup.ItemIndex Возможность разбить варианты на колонки TfgRadioGroup.AlignOptions.Columns Возможность указать отступы для вариантов по вертикале и горизонател TfgRadioGroup.AlignOptions.HorzSpace, TfgRadioGroup.AlignOptions.VertSpace Возможность узнать, когда пользователь делает выбор TfgRadioGroup.OnChanged1 балл -
Ну вот! Я же говорил как-то - жаль нельзя поставить "Мне нравится" несколько раз! Кто-то тут плачется все время, "вдруг Delphi умрет" ... "Delphi уже мертв" ... "FMX не сегодня завтра умрет" ... Я программирую на Pascal с 91го года. Начинал c Turbo Pascal 5.0. И с тех пор мне пытаются втереть "погромизды" - что Pascal/Delphi давно умер ... Тоже самое касается среды RAD Studio. Так вот благодаря таким людям как Ярослав, Андрей, Равиль и многим многим другим, он не только не умер. Он еще и, в большинстве случаев!, даст форы многим другим языкам и IDE. Так-что еще раз спасибо за решение проблемы! (скажите мне - в каких средах или языках их (проблем) нет! ))))1 балл
-
Вот нашел код для записи видео (проверил - работает): unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, Androidapi.JNI.GraphicsContentViewText, System.Messaging, // TMessageManager FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation; type TForm1 = class(TForm) BtnRecord: TButton; Label1: TLabel; procedure BtnRecordClick(Sender: TObject); private { Private declarations } procedure HandleActivityMessage(const Sender: TObject; const M: TMessage); function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean; public { Public declarations } FMessageSubscriptionID:integer; end; var Form1: TForm1; const RECORD_VIDEO = 9; implementation {$R *.fmx} uses System.IOUtils, Androidapi.JNI.Provider, Androidapi.JNI.App, Androidapi.JNI.Net, Androidapi.JNIBridge, Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os; procedure TForm1.BtnRecordClick(Sender: TObject); var VideoIntent: JIntent; videoUri: Jnet_Uri; AFile: JFile; FileName: TFileName; begin FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage( TMessageResultNotification, HandleActivityMessage); VideoIntent := TJIntent.JavaClass.init( TJMediaStore.JavaClass.ACTION_VIDEO_CAPTURE ); if ( VideoIntent.resolveActivity( SharedActivityContext.getPackageManager() ) <> nil) then begin FileName := TPath.Combine( TPath.GetSharedDocumentsPath, 'recording.mp4'); // см. /storage/sdcard0/Documents AFile:=TJFile.JavaClass.init( StringToJString(FileName)); videoUri:=TJnet_Uri.JavaClass.fromFile(AFile); VideoIntent.putExtra( TJMediaStore.JavaClass.EXTRA_OUTPUT, TJParcelable.Wrap((videoUri as ILocalObject).GetObjectID)); SharedActivity.startActivityForResult(VideoIntent, RECORD_VIDEO); end; end; procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); begin if M is TMessageResultNotification then OnActivityResult( TMessageResultNotification(M).RequestCode, TMessageResultNotification(M).ResultCode, TMessageResultNotification(M).Value); end; function TForm1.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean; begin Result := False; TMessageManager.DefaultManager.Unsubscribe( TMessageResultNotification, FMessageSubscriptionID); FMessageSubscriptionID := 0; if RequestCode = RECORD_VIDEO then begin if ResultCode = TJActivity.JavaClass.RESULT_OK then begin TThread.Queue(nil, procedure begin Label1.Text:='recording completed'; Invalidate; end); end; end; end; end. Пишет стандартной программой и сохраняет под названием recording.mp4 Если нужно просто писать видео, то подойдет.1 балл