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

NotificationCenter в сервисе


Rusland

Вопрос

Опубликовано (изменено)

Пытаюсь из сервиса выдать уведомление: 

procedure TAndroidServiceDM.SendNotify(AlertName,AlertBody:String);
var
  Notification: TNotification;
begin
  Notification := NotificationC.CreateNotification;
  try
    Notification.Name := AlertName;
    Notification.AlertBody := AlertBody;
    Notification.FireDate := Now;

    NotificationC.ScheduleNotification(Notification);
  finally
    Notification.DisposeOf;
  end;
end;
...
// пытаюсь вызвать
SendNotify('Attention','Тревога');

Вроде не UI использую, но получаю ошибку Segmentation fault 11.

Ошибка происходит в System.Android.Notification в строке 208-209

  LaunchIntent := TAndroidHelper.Context.getPackageManager().getLaunchIntentForPackage(TAndroidHelper.Context.getPackageName());
  AIntent.putExtra(TJNotificationInfo.JavaClass.EXTRA_ACTIVITY_CLASS_NAME, LaunchIntent.getComponent().getClassName());

Снова похоже на обращение к Activity (а может что-то другое).

 

Есть решение как обойти эту проблему?

 

 

PS. Delphi RX

Изменено пользователем Rusland

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

  • 0
Опубликовано (изменено)

Cтандартный пример \Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidNotificationServiceDemo\NotificationServiceDemo.groupproj

не содержит никаких интент (ZuBy, где вы их там увидели?), здесь простейший код:

 
function TNotificationServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags,
  StartId: Integer): Integer;
begin
  LaunchNotification;
  JavaService.stopSelf;
  Result := TJService.JavaClass.START_STICKY;
end;

procedure TNotificationServiceDM.LaunchNotification;
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'ServiceNotification';
    MyNotification.Title := 'Android Service Notification';
    MyNotification.AlertBody := 'RAD Studio 10 Seattle';
    MyNotification.FireDate := IncSecond(Now, 8);
    NotificationCenter1.ScheduleNotification(MyNotification); // Segmentation Fault 11
  finally
    MyNotification.Free;
  end;
end; 

и он у меня РАБОТАЕТ.

 

Но как только я переношу процедуру в свой проект, то на строке NotificationCenter1.ScheduleNotification(MyNotification);

вылетает Segmentation Fault 11.

 

Сейчас пересоздам пустой проект, начну наполнять его тем же что есть в моем изначальном проекте и постараюсь воспроизвести ошибку.

Изменено пользователем Rusland
  • 0
Опубликовано (изменено)

 

Cтандартный пример \Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidNotificationServiceDemo\NotificationServiceDemo.groupproj

не содержит никаких интент (ZuBy, где вы их там увидели?), здесь простейший код:

 
function TNotificationServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags,
  StartId: Integer): Integer;
begin
  LaunchNotification;
  JavaService.stopSelf;
  Result := TJService.JavaClass.START_STICKY;
end;

procedure TNotificationServiceDM.LaunchNotification;
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name := 'ServiceNotification';
    MyNotification.Title := 'Android Service Notification';
    MyNotification.AlertBody := 'RAD Studio 10 Seattle';
    MyNotification.FireDate := IncSecond(Now, 8);
    NotificationCenter1.ScheduleNotification(MyNotification); // Segmentation Fault 11
  finally
    MyNotification.Free;
  end;
end; 

и он у меня РАБОТАЕТ.

 

Но как только я переношу процедуру в свой проект, то на строке NotificationCenter1.ScheduleNotification(MyNotification);

вылетает Segmentation Fault 11.

 

Сейчас пересоздам пустой проект, начну наполнять его тем же что есть в моем изначальном проекте и постараюсь воспроизвести ошибку.

 

 

Я попытался использовать Ваш пример вызова приложения из сервиса, и столкнулся именно с такой же ситуацией, если из манифеста убрать лишние фильтры, то работает центр нотификации, но перестает работать вызов, если добавить обратно то перестает работать центр нотификации но работает вызов. Как исправить не знаю, но у меня было такое наблюдение.

Изменено пользователем YuraProff
  • 0
Опубликовано

Кстати, в последнее время у меня не работает стандартный пример DownloadServiceDemo (а может и никогда не работал). Возможно эти два случая как-то связаны.

 

 

У меня и до не работала, хотя просто подозреваю что в примере не корректная ссылка на изображение

  • 0
Опубликовано (изменено)

У меня и до не работала, хотя просто подозреваю что в примере не корректная ссылка на изображение

Я менял ссылку, на проверенную, все равно отказывается скачивать.

 

Так, создал проект с нуля, подцепил ту же процедуру и она работает, уведомление в шторку приходит... видимо в старом проекте что-то используется что мешает работе... воспроизвести ошибку не удается.

 

Стоп, опять проявилась болезнь...

 

В общем это происходит после того как я добавляю в программе в AndroidManifest.template.xml:

 

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:mimeType="text/pas" />

для общения через Intent.

Проект приложил, проверьте пожалуйста.

NotificationAppService.zip

Изменено пользователем Rusland
  • 0
Опубликовано (изменено)

Подозреваю что проблема в использовании Andropidapi.Helpers в сервисе. (Багрепорт)

Можно как-то от нее избавиться?

Сейчас она нужна для функции StringToJString.

Intent.setType(StringToJString('text/pas'));

Можно ли чем-то заменить?

 

PS. Изменения в Andropidapi.Helpers согласно багрепорту не помогли

Изменено пользователем Rusland
  • 0
Опубликовано

В стандартном примере "NotificationServiceDemo" в приложении и в сервисе два TNotificationCenter.

Не могу понять, как они связаны друг с другом?

1. Сервис выполняет отправку нотификации у себя в процедуре "procedure TNotificationServiceDM.LaunchNotification;"

2. Появляется вверху уведомление.

3. Я по нему делаю тап.

4. В главном приложении выполняется приём сообщения.

Но связи в исходниках я не вижу. Кто-то может пояснить чуть подробнее?

  • 0
Опубликовано

Всё делаю, как в примере. Но в итоге при нажатии на кнопку старта сервиса приложение падает.

Проект приложил к письму.

Может кто сможет найти проблему, что не так?

Спасибо.

FMXService.rar

  • 0
Опубликовано

Удалил полностью всё, что связано с библиотекой сервиса. Создал заново.

Теперь работает. Но всё же было так же, как и в первый раз.

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

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

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

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

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

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

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