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

Служба + перехват номера


x11

Вопрос

На основе нескольких тем форума сделал службу перехвата звонков и номера телефона.

http://fire-monkey.ru/topic/3878-статьякак-создать-простой-android-broadcast-receiver-how-to-implement-simplest-android-broadcast-receiver-in-delphi/

http://fire-monkey.ru/topic/2386-перехват-события-звонка/

http://fire-monkey.ru/topic/2972-использование-нативных-localbroadcastmanager-и-broadcastreceiver/

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

Но что до ума не удалось довести, так это то, как правильно останавливать службу и закрывать приложение.

Проект (для Токио) приложил теме.

Заранее благодарен.

 

BR2.rar

Изменено пользователем x11
замена примера на более удачный вариант
Ссылка на комментарий

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

  • 0

При остановке службы получаю исключение

Project Host.apk raised exception class Segmentation fault (11).

на строке BroadcastReceiver := nil;

 

procedure TDMSrv.BroadCastReiverFree;
begin
  if Assigned(BroadcastReceiver) then
  begin
    BroadcastReceiver.Destroy;
    BroadcastReceiver := nil;
  end;
end;

хотя при отладке видно, что BroadcastReceiver равен nil, но assigned всё равно возвращает True.

Screenshot_1.png

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

Проблема вот в чем. Событие о входящем звонке срабатывает 2 раза.

Об исходящем нормально - 1 раз. Не могу понять, что не так :(

http://fire-monkey.ru/topic/4740-broadcastreceiveronreceive-срабазывает-2-раза/

 

Изменено пользователем x11
Ссылка на комментарий
  • 1
20 часов назад, x11 сказал:

Проблема вот в чем. Событие о входящем звонке срабатывает 2 раза.

Сегодня в разговоре с андроид-разработчиком (Android studio) узнал, что и у него тоже это событие срабатывает 2 раза.

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

Вопрос по Андроиду 6 и выше.

Оказалось, что служба с  BroadcastReceiver`ом не получает сообщения, если в targetSdkVersion указать версию 24 или 25.

Если указываешь не выше 22, то получает и срабатывает. С чем это связано может быть? Нет ошибок, просто BroadcastReceiver не получает сообщения.

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

х11, боьшое тебе спасибо за пример!

Прикрутил к нему возможность отправлять номер при входящем звонке на комп в виде get-запроса. Столкнулся с проблемой. IP адрес устройства, на который будет отправляться get-запрос приходится прописывать в uDMSrv модуле и перекомпилировать каждый раз. Хотелось бы сделать Edit в uHost, в который можно вписать IP адрес в интерфейсе приложения. Можешь ли подсказать как сделать чтобы uDMSrv модуль мог подхватывать значение из uHost модуля, из Edit-a например?

Ссылка на комментарий
  • 0
В 22.02.2018 в 16:12, x11 сказал:

Вопрос по Андроиду 6 и выше.

Оказалось, что служба с  BroadcastReceiver`ом не получает сообщения, если в targetSdkVersion указать версию 24 или 25.

Если указываешь не выше 22, то получает и срабатывает. С чем это связано может быть? Нет ошибок, просто BroadcastReceiver не получает сообщения.

В общем, это связано с тем, что в новых андроидах проверка прав приложения происходит непосредственно при выполнении той или иной функции, которая требует этих прав. Поэтому нужно при выполнении этой функции обрабатывать запрос прав.

Ссылка на комментарий
  • 0
  • Модераторы
В 15.12.2018 в 16:14, qubasesx сказал:

х11, боьшое тебе спасибо за пример!

Прикрутил к нему возможность отправлять номер при входящем звонке на комп в виде get-запроса. Столкнулся с проблемой. IP адрес устройства, на который будет отправляться get-запрос приходится прописывать в uDMSrv модуле и перекомпилировать каждый раз. Хотелось бы сделать Edit в uHost, в который можно вписать IP адрес в интерфейсе приложения. Можешь ли подсказать как сделать чтобы uDMSrv модуль мог подхватывать значение из uHost модуля, из Edit-a например?

Сохранить в файл используя: Ini/Json/Xml/Plain Text

Ссылка на комментарий
  • 0
В 17.12.2018 в 19:12, Равиль Зарипов (ZuBy) сказал:

Сохранить в файл используя: Ini/Json/Xml/Plain Text

Спасибо! Реализовал задумку через сохранение в файл ini. Использовал конструкцию: fileAdres := TPath.Combine(TPath.GetSharedDocumentsPath, 'Settings.ini');

Для работы этого нужно добавить System.IOUtils в uses.

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

А вот ещё такой вопрос, как сделать так чтобы при входящим или исходящем звонке выполнялось какое-нибудь действие в главной форме? Ну например менялось свойство Text компонента Label, или выполнялась какая-нить процедура типа Button1Click(Sender); ?

Ссылка на комментарий
  • 0
16 часов назад, qubasesx сказал:

А вот ещё такой вопрос, как сделать так чтобы при входящим или исходящем звонке выполнялось какое-нибудь действие в главной форме?

Ну так об этом как раз в этой теме и идёт речь

Ссылка на комментарий
  • 0
47 минут назад, x11 сказал:

Ну так об этом как раз в этой теме и идёт речь

Вы имеете ввиду что единственный вариант это сделать - через значение, которое передавать через текстовый файл например, в в основной форме по таймеру опрашивать значение какой-то строки файла?

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

я уже не помню, но туту нужно погуглить/поспрашивать, как передавать данные между андроидовскими службами и приложениями

тут тоже есть примеры и описания

Ссылка на комментарий
  • 0
8 часов назад, qubasesx сказал:

Вы имеете ввиду что единственный вариант это сделать - через значение, которое передавать через текстовый файл например, в в основной форме по таймеру опрашивать значение какой-то строки файла?

Описать BroadcastReceiver в приложении, а из сервиса слать сообщение (интент) с необходимыми данными.

На форуме есть пример даже с сервисом 

 

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

 

В 16.12.2018 в 16:13, x11 сказал:

В общем, это связано с тем, что в новых андроидах проверка прав приложения происходит непосредственно при выполнении той или иной функции, которая требует этих прав. Поэтому нужно при выполнении этой функции обрабатывать запрос прав.

Не могли бы показать на примере как обрабатывать запрос прав?

Ссылка на комментарий
  • 0
11 часов назад, x11 сказал:

поищи по форуму или погугли - был пример готовый

Спасибо разобрался. Сервис реагирует на входящие вызовы, но почему то не может прочесть входящий номер. Подозреваю, что для этого также нужно дать права доступа. Разрешаю доступ на READ_PHONE_NUMBERS, но все равно не считывает номер. Может какие то другие права нужно дать? Подскажите пожалуйста. 

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

Помогите пожалуйста! При компилировании выходит ошибка:
[Exec Error] The command ""C:\Program Files\Java\jdk1.8.0_60\bin\jar" cf ".\Android\Debug\CallerIdSrv.jar" -C "\\Mac\Home\Documents\1111\BR2\srv\JavaClasses\CallerIdSrv" ." exited with code 1.

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

У меня есть уже приложение на Delphi 10 и перехват работает (Samsung 8, Android 9), но только если включено питание к телефону. Как понял, нужно чтобы был запущен сервис и вот нашел ваш проект. Я правильно понимаю, что этот проект может выполнить перехват звонка если телефон не подключен к питанию, т.е выполняться как сервис? Если да, то помогите избавиться от ошибки отправленной мной выше. 

Ссылка на комментарий
  • 0
15 минут назад, ТАГИР Тагирович сказал:

Я правильно понимаю, что этот проект может выполнить перехват звонка если телефон не подключен к питанию

Нет. Проект старый, может работать для Андроид 4-5 и не будет работать для Андроида 6 или выше. В Андроид 6 или 7 Гугл добавила "динамические права", т.е. запрос выскакивает прямо посреди работы приложения. А старые версии FMX эти запросы обрабатывать не умеют. Я проект делал на Berlin`е.

Ссылка на комментарий
  • 0
18 минут назад, ТАГИР Тагирович сказал:

перехват работает (Samsung 8, Android 9), но только если включено питание к телефону

Ну и нафиг оно такое надо? Не факт ,что будет нормально работать на китайских поделках а-ля Хуйвей или Сяоми, где права урезаны ещё жесче.

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

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

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

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

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

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

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

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

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

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