-
Постов
414 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Активность репутации
-
Pax Beach отреагировална Равиль Зарипов (ZuBy) в Как изменить версию АПИ для компиляции проекта
в SDK Manager'e можно посмотреть
-
Pax Beach отреагировална Равиль Зарипов (ZuBy) в Как управлять питанием устройства
так я тут покапался чуток
uses FMX.Helpers.Android, AndroidApi.Helpers, AndroidApi.JNI.JavaTypes, AndroidApi.JNIBridge, AndroidApi.JNI.GraphicsContentViewText, Android.os.PowerManager; function HasPermission(const Permission: string): Boolean; begin Result := TAndroidHelper.Context.checkSelfPermission(StringToJString(Permission)) = TJPackageManager.JavaClass.PERMISSION_GRANTED; end; var PowerObj: JObject; PowerManager: JPowerManager; begin if HasPermission('android.permission.WAKE_LOCK') then // доступ есть begin if HasPermission('android.permission.REBOOT') then // доступа НЕТ begin PowerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE); PowerManager := TJPowerManager.Wrap((PowerObj as ILocalObject).GetObjectID); PowerManager.reboot(nil); end else Log.d('android.permission.REBOOT == DENIED'); end else Log.d('android.permission.WAKE_LOCK == DENIED'); если убираем проверку разрешения REBOOT
https://developer.android.com/reference/android/Manifest.permission.html#REBOOT
этот способ только для системы, извне его не вызвать.
Есть еще два способа
1) через SuperUser (Только этот способ остается)
2) через Intent (отменяется)
-
Pax Beach получил реакцию от Rusland в PowerOff - пример приложения с гибким интерфейсом(flexible interface)
А в Android работает? ;-) Это очень актуально.
-
Pax Beach отреагировална Brovin Yaroslav в TBeacon. CASE: Использование маячков для контроля расхода электроэнергии
Здорово.
Приятно было почитать статью! Особенно, сделанное нашими :-) Придумал, набросал прототип, получил наглядный результат
Молодцы!
-
Pax Beach получил реакцию от Andrey Efimov в Методы шифрования delphi
Для каких задач нужно шифрование?
Если нужно шифровать текст для передачи по сети, то с этим справятся DataSnap и Indy.
А если файлы шифровать, и чтобы работало на всех платформах, возьмите открытый код стандартных методов шифрования AES, RSA, DES и т.п. Например, здесь, и используйте в своем проекте.
Конечно, давно пора это дело причесать под XE и Berlin и выложить для сообщества. Только не забываете про различие UNIX и Windows нумерации символов в String.
-
Pax Beach отреагировална Error в PowerOff - пример приложения с гибким интерфейсом(flexible interface)
PowerOff - максимально упрощенное приложение для автоотключения компьютера.
Приложение и исходный код можно загрузить здесь: https://github.com/errorcalc/PowerOff
Полезно если вы перед сном любите включать ролики на YouTube/музыку/сериалы/фильмы, но засыпаете и они продолжают играть всю ночь, вызывая на утро головную боль...
По большому счету утилита была написана и с целью проверить пригодность технологии FireMonkey для разработки - в целом - да, на данный момент, под Windows (и для имитирования UWP интерфейса), это вполне работоспособная технология.
-
Pax Beach отреагировална enatechno в Как изменить версию АПИ для компиляции проекта
Хочу возразить.
Был у меня такой случай. Проект, который успешно компилировался под android на Berlin 10.1 (без upd1) с ndk из коробки (r9c), в один "прекрасный" день при создании lib[ИмяПроекта].so выдал ошибку:
lib[ИмяПроекта].so: mmap: failed to allocate ........... bytes for output file: Not enough space
Так как со свободным местом было все норм, я стал гуглить подобную ошибку и узнал что она встречается в разных версиях RAD (начиная с XE7). Как решение, предлагалось обновить NDK на более позднюю. Что я и сделал, установив ndk r12b. И это решило мою проблему: с новым ndk проект был успешно откомпилирован и запущен на разных версиях android.
-
Pax Beach получил реакцию от Rusland в Как управлять питанием устройства
Просьба выложить для всех пример кода решения для перезагрузки телефона.
Были грабли с использованием? Какие пермишены потребовались?
-
Pax Beach отреагировална RoschinSpb в Особенности TGrid в Delphi 10.1 Berlin (XE10)
1. У колонки можно менять свойство Padding.
2. Grid теперь может быть и стилевым и нативным. В нативном этого события быть не может. Чтобы работать со стилями см. стилевое представление грида TStyledGrid в модуле FMX.Grid.Style.pas.
3. По моему мнению проколом было наличие этих свойств в публичной секции. Grid это составной компонент, он неким образом самостоятельно реагирует на события мыши, если Вы будете делать что-то своё, то ваши действия могут войти в противоречие со стандартным поведением этого компонента и непредсказуемым последствиям. Поскольку грид переписан чуть менее чем полностью я посчитал, что это хороший повод убрать потенциальную уязвимость, здесь указаны все упраздненные события. В этом обсуждении я пытался объяснить что можно сделать.
4. По этому поводу трудно что-то сказать навскидку, пишите в QC, не забудьте приложить простой воспроизводимый пример.
5. Да, дело в совместимости. Фон может содержать картинку, поэтому по умолчанию все ячейки прозрачные. Но, если добавить AlternatingRowBackground в Options, то событие будет вызываться. Также оно вызывается при появлении редактора. Вообще сильно рекомендую посмотреть демку GridDemo, там можно в run-time менять настройки и смотреть в логе все приходящие события.
Еще здесь я что-то писал.
-
Pax Beach отреагировална Brovin Yaroslav в TNotificationCenter
нет. iOS не предоставляет такой функциональности. Более того, приложение может быть и не запущено в принципе. И в этом случае некому об этом сообщать.
-
Pax Beach получил реакцию от AngryOwl в Контролировать приход SMS
У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
есть такой метод.
UPD:
А... обратил внимание, что метод появился с API-19.
-
Pax Beach получил реакцию от zairkz в Контролировать приход SMS
У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
есть такой метод.
UPD:
А... обратил внимание, что метод появился с API-19.
-
Pax Beach отреагировална Равиль Зарипов (ZuBy) в Контролировать приход SMS
const SMS_RECEIVED = 'android.provider.Telephony.SMS_RECEIVED'; procedure SMSReceiver(aIntent: JIntent); //uses // Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony, Androidapi.JNI.Provider, Androidapi.JNIBridge, // Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; var aSmss: TJavaObjectArray<JSmsMessage>; aSms: JSmsMessage; aFrom: string; aBody: string; I: Integer; begin if aIntent = nil then exit; if (aIntent.getAction <> nil) and (aIntent.getAction.compareToIgnoreCase(StringToJString(SMS_RECEIVED)) = 0) then begin aSmss := TJavaObjectArray<JSmsMessage>.Create; aSmss := TJSms_Intents.JavaClass.getMessagesFromIntent(aIntent); aFrom := JStringToString(aSmss[0].getDisplayOriginatingAddress); aBody := ''; for I := 0 to aSmss.Length - 1 do begin aSms := aSmss[I]; aBody := aBody + JStringToString(aSms.getDisplayMessageBody); end; end; end; не проверял, но по коду так, только как нить вернуть нужно aFrom, aBody
сделать как функцию и тд..
-
Pax Beach получил реакцию от Rusland в Контролировать приход SMS
У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
есть такой метод.
UPD:
А... обратил внимание, что метод появился с API-19.
-
Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Контролировать приход SMS
Ну была проблема при отправке определенных ACTION в broadcast.
Видимо, твоего примера это не касается.
На чем ты споткнулся при переводе JAVA примера в Delphi?
Выглядит, вроде, все понятно. Получил сообщение broadcast — значит имеешь контекст и намерение (Intent). Из него получаешь методом getMessagesFromIntent класса TJSms_Intents нужное тебе сообщение.
-
Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Контролировать приход SMS
У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
есть такой метод.
UPD:
А... обратил внимание, что метод появился с API-19.
-
Pax Beach получил реакцию от Rusland в Наклеить одно изображение на другое
Как ты ищешь? )
Вот решение люди предлагают.
-
-
-
-
Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Проверка валидности символов
Так ставьте галочку решения вопроса, он же Ваш.
-
Pax Beach отреагировална Равиль Зарипов (ZuBy) в Проверка валидности символов
function TForm11.isEditCorrect(Sender: TEdit): Boolean; var text: String; i: Integer; aCharArr: TCharArray; begin text := TEdit(Sender).text; aCharArr := text.ToCharArray; Result := True; for i := Low(aCharArr) to High(aCharArr) do begin if not(aCharArr[i] in charters) then Result := False; end; if text.CountChar('-') > 1 then Result := False; end; вот так правильно
-
Pax Beach отреагировална Brovin Yaroslav в [iOS] [iOS10] Приложение падает при использовании камеры в iOS 10 64 bit
Так, проблему изучил. Решение очень простое. Начиная с iOS10 приложение, если хочет использовать камеру, библиотеку и другие сторонние сервисы, должно добавлять в манифест специальные ключи. Для камеры и библиотеки эти ключи изображены ниже:
Добавьте эти ключи и все будет ок.
Подробнее про ключи можно прочитать тут: Cocoa Keys
-
Pax Beach отреагировална Brovin Yaroslav в Как сделать автоматическое изменение высоты TListBoxItem под содержимое текста?
Ответ косвенно был дан в теме Автоматический переход на вторую строку TLabel
Поэтому на базе этого ответа его легко модифицировать для этой задачи. Идея простая в момент загрузки стиля и изменения размеров TListBoxItem, вычислять высоту занимаемого текста и на основании этих данных переопределять высоту итема.
Практика
1. Для определения размеров текст используем TTextLayout. Лучше создавать объект этого класса один раз. Поскольку в нашем случае он будет использоваться часто.
procedure TForm1.FormCreate(Sender: TObject); begin // FTextLyout: TTextLayout - поле формы FTextLyout := TTextLayoutManager.DefaultTextLayout.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(FTextLyout); end; 2. Пишем свой обработчик, который мы будем вызывать по достижению двух событий:
Изменение размера TListBoxItem. В этом случае нужно перевычислить высоту итема. При загрузки нового стиля итема, нам нужно заново вычислить высоту итема. Поскольку стиль может содержать новые настройки отображения текста (шрифт, размер и тд.) Я назвал это событие CalculateItemHeght:
procedure TForm1.CalculateItemHeight(Sender: TObject); var ListItem: TListBoxItem; begin if Sender is TListBoxItem then begin ListItem := Sender as TListBoxItem; FTextLyout.BeginUpdate; try // Инициализируем текстовый слой для корректного вычисления // размеров отображаемого текста FTextLyout.Text := ListItem.Text; FTextLyout.MaxSize := TPointF.Create(ListItem.Width, 1000); FTextLyout.WordWrap := ListItem.WordWrap; FTextLyout.Font := ListItem.Font; FTextLyout.HorizontalAlign := ListItem.TextAlign; FTextLyout.VerticalAlign := ListItem.VertTextAlign; finally FTextLyout.EndUpdate; end; // Получаем высоту текста при текущих настройках итема ListItem.Height := FTextLyout.Height; end; end; Обратите внимание, что этот код работает для горизонтальной ориентации TListBoxItem и обычного TListBoxItem итема без картинок. Поэтому я для упрощения понимания кода, принимаю за ширину текста ширину самого итема. Но как вы понимаете, текст в итеме имеет еще свои отступы и может располагаться, например, справа от изображения. В этом случае этот в этот код нужно будет добавить определение текущих размеров стилевого объекта текста, отвечающего за вывод текста в TListBoxItem.
Но в вашем примере этого не нужно.
3. Вешаем наш обработчик на два события каждого итема TListBoxItem.OnResize и TListBoxItem.OnApplyStyleLookup.
Результат
-
Pax Beach получил реакцию от Brovin Yaroslav в Simple BLE Beacon telemetry — работа с TBeacon
Возникла задача обработки телеметрии BLE маячков для построения пространственной карты.
За пару дней собрал приложение для «ловли» маячков.
Производится сбор всей телеметрии с маячков, которую обрабатывает компонент TBeacon. Данные можно передать в виде текста в другое приложение или отправить вложением по почте.
Сейчас приложение Можно скачать в Google Play.
Для платформ Windows качать здесь (SimpleBeaconTelemetry.exe.zip).
Просьба протестировать у себя на устройствах.
Код элементарный, если кому-то нужен, могу выложить сюда (SimpleBeaconTelemetry.zip).