Перейти к содержанию
Fire Monkey от А до Я
  • 0

Сервис + доступ к звонкам


x11

Вопрос

Прошу помощи или хотя бы совета.

Кто-то уже пытался создать службу, которая может перехватывать звонки входящие и исходящие?

Пример для обычного приложения есть с таким кодом

  TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
  if Assigned(PhoneDialerService) then
    PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged;
  

 

Плюс пытаюсь всё это скрестить с NotificationCenter, но служба при запуске зависает и падает.

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

вот полный код 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.

 

Изменено пользователем x11
Ссылка на комментарий
  • 0
  • Модераторы

в сервисе не работает NotificationCenter, TPlatformServices

и все что есть в модулях начинающихся на FMX.****

Ссылка на комментарий
  • 0

Получается, что если нужно сделать Vibro или Toast, то нужно отправить что-то своему host-приложению, а оно уже это сделает? Предварительно как-то проверив, запущено ли оно и, если нужно, то запустить как-то.

Ссылка на комментарий
  • 0
14 минуты назад, Равиль Зарипов (ZuBy) сказал:

в сервисе не работает NotificationCenter

 

Как не работает, а как же примеры из поставки Delphi, например, AndroidNotificationServiceDemo и AndroidBeaconServiceDemo.

Ссылка на комментарий
  • 0

здесь http://delphifmandroid.blogspot.fr/2016/01/broadcastreceiver.html

есть пример с BroadcastReciver, я так понимаю, что и в службе можно запилить подобный BroadcastReciver со звонками?

Может у кого есть примеры?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...