-
Постов
828 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Весь контент x11
-
плохо А как же тогда реализовать подобную идею? Обычную программу создавать и заставлять её работать в фоне с помощью танца с бубном?
-
вот полный код TDataModule сервиса unit uDMService; interface uses System.SysUtils, System.Classes, System.Android.Service, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Os, FMX.PhoneDialer, FMX.Platform, System.Notification; type TDM = class(TAndroidService) NotificationCenter1: TNotificationCenter; procedure AndroidServiceCreate(Sender: TObject); function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private PhoneDialerService: IFMXPhoneDialerService; procedure MyOnCallStateChanged(const ACallID: String; const ACallState: TCallState); procedure LaunchNotification(const AlertBody: String); public { Public declarations } end; var DM: TDM; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} uses Androidapi.JNI.App, System.DateUtils; { TDM } procedure TDM.AndroidServiceCreate(Sender: TObject); begin LaunchNotification('AndroidServiceCreate'); TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)); if Assigned(PhoneDialerService) then begin LaunchNotification('PhoneDialerService'); PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged; end; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin LaunchNotification('AndroidServiceStartCommand'); JavaService.stopSelf; result := TJService.JavaClass.START_STICKY; // держать сервис запущенным end; procedure TDM.MyOnCallStateChanged(const ACallID: String; const ACallState: TCallState); var outText: String; Begin case ACallState of TCallState.None: outText := 'No calls'; TCallState.Connected: outText := 'Connected'; TCallState.Incoming: outText := 'Incoming call'; TCallState.Dialing: outText := 'Dialing'; TCallState.Disconnected: outText := 'Disconnected'; end; LaunchNotification(ACallID); end; procedure TDM.LaunchNotification(const AlertBody: String); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'ServiceNotification'; MyNotification.Title := 'Android Service Notification'; MyNotification.AlertBody := AlertBody; MyNotification.FireDate := IncSecond(Now, 3); NotificationCenter1.ScheduleNotification(MyNotification); finally MyNotification.Free; end; end; end.
-
Прошу помощи или хотя бы совета. Кто-то уже пытался создать службу, которая может перехватывать звонки входящие и исходящие? Пример для обычного приложения есть с таким кодом TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)); if Assigned(PhoneDialerService) then PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged; Плюс пытаюсь всё это скрестить с NotificationCenter, но служба при запуске зависает и падает.
-
Экспериментировал с сервисами. После переименования проекта библиотеки сервиса удалил и снова хочу добавить к host-проекту библиотеку-service. На первом шаге выбираю "Искать автоматически". На втором выбираю папку, где живет проект-библиотека, но среда ругается и выдает старое имя. Но я не могу найти, где именно среда находит это старое имя.
-
Да, теперь получилось.
-
Как я мог собрать неправильно? Я просто построил библиотеку (Build), потом сам host-проект, и нажал кнопку Запустить без отладки.
-
Нет, у меня файл Androidapi.JNI.Toast.pas
-
Вопрос по правам. Нужно ли какие-то права указывать именно для библиотеки сервиса? Или достаточно того, что они есть у приложения-хозяина? Скомпилировал библиотеку и приложение BeaconServiceApp - то же самое - нажимаю кнопку и ничего не происходит. Плохо, что TLocalServiceConnection.StartService() не возвращает никакого результата
-
HTC One Max, Androшв 5.0.2, стандартная оболочка HTC Sense 6.0. Lenovo S1, Android 6.0, стандартная оболочка (не знаю, как называется). Могу ещё проверить на стареньком Samsung Galaxy S2 (Android 4.4.2).
-
ага, я уже немного исследовал примеры у меня даже стандартный пример из коробки не работает http://fire-monkey.ru/topic/4711-не-запускается-служба/
-
Использую стандартный пример из папки C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidNotificationServiceDemo\NotificationService Delphi Tokyo. Компилируется и запускается на устройстве. Нажимаю кнопку Start service, но ничего не происходит. Т.е. совсем ничего: ни ошибок, ни падений приложения, никаких сообщений. В какую строну копать? И вообще, как проверить, работает ли мой сервис? Я от крыл в настройках андроида "Запущенные программы", но там нет даже моего приложения в списке, хотя приложение запущено. Пробовал на Андроид версий 5 и 6.
-
Кстати, можно написать просто TLocalServiceConnection.StartService('ServiceName'); т.е. без объявления Fservice := TLocalServiceConnection.Create;
-
Посмотрел видео. 1. Те. получается, что D 10+ позволяют создавать службы для андроида без дополнительных java файлов? 2. Можно ли обходится без HOST-приложения? Если да, то как запустить сервис? 3. Присоединяюсь к вопросу fsdb: нужны ли какие-тор танцы с бубном, чтобы сервис автоматически запускался при старте ОС или он будет, как в винде, запускаться автоматически без лишних танцев? 4. Разрешено ли сервису использовать Toast? Спасибо. Видео описано в этой справке http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Creating_Android_Services#Creating_an_Android_Service
-
В первую очередь нужно проверить, видит ли утилита adb.exe ваше устройство. в консоли CMD нужно зайти в папку "C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\platform-tools" И выполнить adb devices, появится строка: List of devices attached и под ней все подключенные смартфоны (устройства). Если там ничего не будет, то не установлены USB-драйверы, либо на устройстве не включен режим разработчика. Когда установите драйверы и перезапустите ПК, то adb может всё равно не увидеть устройство, тогда поможет создание файла adb_usb.ini и нужно будет прописать в нём ID устройства: http://digphone.ru/esli-android-adb-ne-vidit-smartfon/ После этого перезапустить ПК. Снова запустить в CMD: adb.exe devices после этого может появиться строка, говорящая о том, что устройство подключено, но не авторизовано, т.е. код устройства и unauthorized: Переподключите смартфон к компьютеру и на экране смартфона должно появиться окно авторизации, где нужно нажать ОК и, возможно, перед этим сперва поставить галочку "Всегда разрешать подключение с этого ПК". Снова выполните adb.exe devices и увидите, что вместо unauthorized, будет слово device. Вместо перезапуска ПК, можно перезапускать службу adb adb kill-server adb start-server
-
Delphi Tokyo не видит устройство. Нажимаю Refresh там, где Target в менеджере проекта, появляется сообщение: Что не так? Что нужно доустановить?
-
В общем, я: 1. Скопировал стили в папку проекта в styles. 2. Открыл файл *.dproj и заменил там старый путь к стилям на новый, чтобы получилось такое: "<RcItem Include="styles\Android\AndroidCopperDark.style">"
-
Так в том-то и дело - зачем мне TCircle? И картинку я не добавляю в Deployment.
-
Странно, не помню я, чтобы вводил имена сталей. Справа нужно вводить? Спасибо, попробую.
-
а Вы пробовали?
-
А кто заполняет колонку Identifier так правильно?