-
Постов
414 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Весь контент Pax Beach
-
«A wake lock is a mechanism to indicate that your application needs to have the device stay on» Понимаю, такое использовать в играх, видео плеерах. А для по сути сервисов запрещать телефону спать не хорошо, нет? UPD: Хотя, вот после прочтения статьи Keeping the Device Awake понятнее становится.
-
По порядку: 1. Сервис поможет работать с датчиками, не запуская приложение, если это нужно делать скрыто без участия пользователя. Даже, если приложение выгружено из памяти, сервис обработает нужные сообщения с датчиков и сети (если нужно PUSH с сервера получить). Ну это все выше обсудили вроде. 2. Другой вариант, прописать в Manifest BroadCastReceiver, слушать события типа (TJBluetoothDevice.JavaClass.ACTION_FOUND or TJBluetoothAdapter.JavaClass.ACTION_SCAN_MODE_CHANGED, могу ошибаться с BLE не работал). Приложение само будет запускаться (не открываться основная активити, а запускаться в памяти), когда система будет отлавливать эти события и передавать приложению. Вот только не уверен, что система их будет ловить, если датчик BLE ни какое приложение не будоражит, и он уснет. Я бы делал первый пункт и второй вместе. 3. Программно включать и выключать BlueTooth не есть хороший тон с точки зрения безопасности, если Гугл это еще не закрыли, то наверное закроют через время. Но в целом, это этическая сторона, а как это делается технически, можно посмотреть здесь. 4. Если у вас есть модуль «Embarcadero\Studio\18.0\source\rtl\net\System.Bluetooth», то в нем есть все, что нужно для работы с BLE. Осталось разобраться, как обрабатывать сообщения на ваших устройствах iOS или Android, как сделать так, чтобы датчики не спали и читали входящие и т.п. 5. В Tools→Getit PM есть компоненты Beacon Fence (BeaconZonesFencing, BeaconMapFencing). Кто-нибудь их смотрел? Судя по описанию, они решают задачу собственно технологии Beacon Fence. Очень интересно узнать, что в итоге получится у Kitty или кого-то еще из этого коллективного обсуждения.
-
Да, глупость спросил. Не догадался макрос в шаблоне совсем убрать и заменить ручной строкой. Спасибо!
- 2 ответа
-
- android
- android service
-
(и ещё 2 )
C тегом:
-
Создан проект в RAD Studio 10.1 Berlin (Delphi), в приложении прилинкован сервис. При компиляции проекта в AndroidManifest.xml появляется строчка: <service android:exported="true" android:name="com.embarcadero.services.MyService" /> А мне нужна строчка: <service android:exported="true" android:name="com.embarcadero.services.MyService" android:label="Этот замечательный сервис создан вручную"/> Ни где не нашел такое свойство. В Project->Options->Version info есть свойство Label только для самого Host приложения. Помогите пожалуйста советом.
- 2 ответа
-
- android
- android service
-
(и ещё 2 )
C тегом:
-
Rusland, как ты обошел проблему "not allowed to send broadcast android.intent.action.PHONE_STATE" при вызове SendBroadcast?
-
IP за пределами РФ работает.
-
Какой такой случай может возникнуть? Тоже прикупил, может чего не знаю )
-
Intents — это намерения. Intent Filter — это желание обслуживать намерения. Принял (приложением) отправленный Intent — будь добр запуститься и обработать это намерение. Не подходят для этой задачи startActivity, нужно использовать BroadcastReceiver и отправлять ему свой Intent: procedure TMainScreen.SomeOneSaysMeWhatIamStupidAndIsentHim; Begin TAndroidHelper.Context.sendBroadcast(Intent); End; procedure TMainScreen.FormActivate(Sender: TObject); begin begin try TAndroidHelper.Context.registerReceiver(FReceiver, FIntentFilter); finally end; end; end; procedure TMainScreen.FormDeactivate(Sender: TObject); begin try TAndroidHelper.Context.unregisterReceiver(FReceiver); finally end; end;
- 12 ответов
-
Коллеги, есть ли у кого-то файл ReservedWordsOP.txt для Java2OP.exe, поделитесь пожалуйста? Каждый раз после конвертации приходится резервные слова руками исправлять.
-
А... так это просто решается. procedure TfmSettings.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); var FService: IFMXVirtualKeyboardService; begin if (Key = vkHardwareBack) then begin Key := 0; // <=== вот здесь очищается буфер клавиатуры TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService)); if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then begin FService.HideVirtualKeyboard; exit; end else begin Close; end; end; end;
-
1) В том же примере MyDialogs присваиваю TEdit'ам TabOrder по-порядку создания. А vkNext не переводит на следующий контрол. 2) А как узнать следующий, все контролы на форме перебирать? Может в FMX есть соответствующий метод, как в VCL SelectNext или FindNextControl? За пример перевода контрола по KeyUp тоже благодарность безмерная.
-
Спасибо большое! Я так понимаю, переход между TEdit по нажатию в виртуальной клавиатуре vkNext или vkReturn не реализовывался? И кнопка по умолчанию тоже отсутствует?
-
Не бейте сильно, но только вот такое безобразие в голову пришло =) procedure TFormMain.DialogEvent(Sender: TObject); var i: integer; s: string; begin s := ''; try for i := 0 to 1000 do s := s + (Sender as TMyInputQuery).Values[i] + #13#10; finally end; ShowMessage('TNotifyEvent '#13#10 + s); end; UPD: Отупение прошло. Но класс мне, конечно, надо будет переписать. procedure TFormMain.DialogEvent(Sender: TObject); var i: integer; s: string; begin s := ''; for i := 0 to (Sender as TMyInputQuery).Edits.count - 1 do s := s + (Sender as TMyInputQuery).Values[i] + #13#10; ShowMessage('TNotifyEvent '#13#10 + s); end;
-
Коллеги, спасибо за проделанную работу. Работает пример как надо! P.S.: Очень странно, что встроенный InputQueryAsync использует TEdit, а доступ к нему для преднастройки не дает. P.P.S.: Авторы, krapotkin и ZuBy подскажите пожалуйста, как в DialogEvent узнать количество введенных в TMyInputQuery значений ( (Sender as TMyInputQuery).Values.Length не работает) ?
-
Я использую сочетание свойств TEdit: *.KillFocusByReturn := false; *.ReturnKeyType := TReturnKeyType.Next; Соответственно на последнем компоненте *.KillFocusByReturn := true; Только не всегда в правильном порядке переход к следующему элементу фокус переходит, но это уже проблема дизайна формы.
-
Спасибо. Это решение!
- 5 ответов
-
- Delphi Berlin
- Cancel
-
(и ещё 1 )
C тегом:
-
Коллеги, подскажите пожалуйста, как при вызове InputQueryAsync или до этого указать, что я хочу вводить только цифры (чтобы открывалась цифровая клавиатура, а не общая)? Меня интересует платформа Android, но может есть и общий способ?
- 5 ответов
-
- Delphi Berlin
- Cancel
-
(и ещё 1 )
C тегом:
-
Возможно же, что какой-то depricated метод действительно перестали поддерживать в новой версии SDK, и он перестал работать, как обычно это делал? Как нам помочь, если не видим проект — кот Шредингера.
-
Кто-нибудь знал, чтобы сервис автоматически запускался по событию BOOT_COMPLETED, нужно, чтобы сервис был Remote Service? В этом случае AndroidManifest.xml будет содержать строку <service android:exported="true" android:name="com.embarcadero.services.BootService" />, а это в свою очередь хорошо отразится на успешном запуске вашего сервиса после перезагрузки устройства. Это была хорошая новость. Плохая заключается в том, что если сервис уже написан, и вам надо включить его в автозагрузку, придется переписать сервис заново (перенести все написанное из обычного в Remote Service). Пора делать отдельный топик. Всем благ!
-
Несколько часов не мог понять, при чем тут Java2OP и Classes.dex, пока не прокачал обе темы и не нашел статью «Using a Custom Set of Java Libraries In Your RAD Studio Android Apps». За то теперь мой класс BootReceiver (extends BroadcastReceiver) добавляется через Project Manager, и проект компилируется и запускается. Правда при загрузке системы ресивер не отрабатывает — днем разберемся. 1. Написал JAVA класс. 2. Скомпилировал в JAR. 3. Сделал обертку при помощи Java2OP. 4. Подключил JAR в Project Manager. 5. Добавил к проекту обертку. 6. Подшаманил AndroidManifest.template.xml (если это нужно в задаче). 7. Пожалуйста → компилируй, собирай. Это реальный прогресс, по сравнению с ручным формированием DEX (ни Clean не сделать, ни Build Conf поменять). Только не знаю, с какой версии появилась такая возможность.