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

x11

Пользователи
  • Постов

    828
  • Зарегистрирован

  • Посещение

  • Победитель дней

    13

Весь контент x11

  1. Заботит, конечно. Но приложение для Андроид. Для чего тогда винда? Просто некоторые функции можно отлаживать на винде, т.к. это значительно удобней и быстрей. Запуск и отладка на Андроиде - это долго.
  2. Это касается технологии в общем или только стандартных компонент Delphi? Например, если использовать сторонние компоненты....
  3. Это уже не моя забота, это уже забора разработчиков FMX.
  4. Под виндой, если передаю, SetLength(val, 1); то ошибки нет. Это баг, получается? Где-то в справке написано, что под виндой нельзя передавать массив, где больше одного элемента?
  5. Мультиплатформенное приложение. Delphi Tokyo. указываю 2 параметра для VAL и передаю это в TDialogService.InputQuery procedure TfmMain.Send(id: integer); Var val: array of string; cap: string; begin // запускаем диалог ввода имени SetLength(val, 2); val[0] := VarToStr(qCalls.Lookup('ID', id, 'name')); val[1] := id.ToString; cap := 'Введите имя'; TDialogService.InputQuery(cap, ['Имя клиента: '], Val, InputDialogHandlerGetShotName); end; В итоге, в недрах TDialogService.InputQuery получаю исключение: На андроиде ошибки нет.
  6. Пробовал когда-то. Но я не знаю, какую мою процедуру прописывать в манифест. Ведь мои процедуры работают внутри FMX и Android их не видит.
  7. А при исходящем вызове всё норм - один раз.
  8. здесь, на форуме взял http://fire-monkey.ru/topic/2386-перехват-события-звонка/?do=findComment&comment=13631 моя тема с проектом http://fire-monkey.ru/topic/4723-служба-перехват-номера/
  9. Проблема в том, что и код добавления записи в базу "InsertTel(incomingCallNumber, True);" тоже срабатывает дважды. Да и обратите внимание, что срабатывает одно и то же событие дважды - PHONE_STATE
  10. x11

    TStatusBar

    Есть компонента TStatusBar. Но там нет ни Text, ни Panels. Для чего она предназначена? Только чтобы hint перехватывать на OSX и всё?
  11. Для подключения к Firebird нужна клиентская библиотека. Взять можно здесь https://firebirdsql.org/en/firebird-3-0/ в папке \lib
  12. Так и должно быть, что событие "BroadcastReceiver.OnReceive" срабатывает 2 раза подряд? Код создания. Проверял: создается только один BroadcastReceiver. procedure TDMSrv.CreateBroadcastReceiver; begin BroadcastReceiver := TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive := BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Items.Clear; BroadcastReceiver.Add(PHONE_STATE); BroadcastReceiver.Add(NEW_OUTGOING_CALL); Log('CreateBroadcastReceiver'); end; Сам код события: procedure TDMSrv.BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); begin log('BroadcastReceiverOnReceive'); CheckPhoneCallState(csContext, csIntent); end; Ну и сама процедура обработки: procedure TDMSrv.CheckPhoneCallState(Context: JContext; Intent: JIntent); var telephonyService: JObject; telephonyManager: JTelephonyManager; state: JString; incomingCallNumber: string; outgoingCallNumber: string; outputResult: string; begin Log('CheckPhoneCallState: ' + JStringToString(Intent.getAction)); outputResult:= sLineBreak; telephonyService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); if JStringToString(Intent.getAction).Equals(PHONE_STATE) then begin state := Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_STATE); if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_IDLE) then outputResult:= outputResult + 'Phone is IDLE ' + sLineBreak else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_RINGING) then begin incomingCallNumber := JStringToString(Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_INCOMING_NUMBER)); if incomingCallNumber.Equals('') then incomingCallNumber:= 'PRIVATE NUMBER'; outputResult := outputResult + 'Phone is RINGING' + sLineBreak; outputResult := outputResult + 'Incoming call from ' + incomingCallNumber + sLineBreak; LaunchNotification(incomingCallNumber, 'Входящий вызов'); InsertTel(incomingCallNumber, True); end else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_OFFHOOK) then outputResult:= outputResult + 'Phone is OFFHOOK' + sLineBreak; end else if JStringToString(Intent.getAction).Equals(NEW_OUTGOING_CALL) then begin outgoingCallNumber:= JStringToString(Intent.getStringExtra(TJIntent.JavaClass.EXTRA_PHONE_NUMBER)); outputResult:= outputResult + 'Outgoing call to ' + outgoingCallNumber + sLineBreak; LaunchNotification(outgoingCallNumber, 'Исходящий вызов'); InsertTel(outgoingCallNumber, False); end; Log(outputResult); end;
  13. Есть 2 кода. Вернее, 2 строки одного и того же кода. В первом случае ошибка segmentation failure (11). Во втором случае ошибки нет. telephonyManager := TJTelephonyManager.Wrap(ILocalObject(telephonyService).GetObjectID); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); Такое приведение типов, с использованием AS касается только Андроида? Или это зависит от компилятора? Или от платформы? Теперь тек, как в пером случае, уже нельзя?
  14. Да, спасибо, смотрел в ту сторону. Пока не разбирался.
  15. Получается... Вроде начал разбираться....
  16. Кто-то пытался работать с Realtime Database или с Cloud Firestore? Я понимаю, что там всё на REST. Но пока что непонятно, куда именно отправлять запросы. Кто-то пытался это использовать? https://github.com/spinettaro/Firebase4Delphi у меня так и не взлетело, даже аутентификация не проходит
  17. 1. Там нужно заменить Activity на Context везде. И тогда можно использовать в сервисах. 2. В NextGen нельзя использовать Destoy напрямую, поэтому код destructor TCSBroadcastReceiver.Destroy; нужно убрать, а вместо этого сделать отдельную процедуру для UnregisterReceiver.
  18. Как правильно уничтожить BroadcastReceiver? Есть код procedure TDMSrv.BroadCastReiverFree; begin if Assigned(BroadcastReceiver) then begin Log('BR is assigned'); BroadcastReceiver.Destroy; end; if Assigned(BroadcastReceiver) then begin Log('BR is assigned'); end; end; Так вот, в лог попадает строка "BR is assigned" два раза подряд, т.к. после строки: BroadcastReceiver.Destroy объект BroadcastReceiver всё равно не равен nil и Assigned возвращает True. Но если после ещё добавить строку: BroadcastReceiver := nil; то на этой строке появляется исключение.
  19. При остановке службы получаю исключение 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.
  20. Подскажите, что нужно изменить в Ваших примерах, чтобы реагировать не на внутренние сообщения, а на внешние? Например, на звонки.
  21. function TDM.AndroidServiceStartCommand( ... .. .. if Action = 'KillApplication' then begin Log('"Die! command geted'); Intent.setAction(StringToJString('StartService')); TJActivityManager.Wrap(ILocalObject(LJO).GetObjectID).killBackgroundProcesses(StringToJString('com.embarcadero.LocalBCR')); end; А зачем StartService в KillApplication?
  22. Вот, что у меня получилось http://fire-monkey.ru/topic/4723-служба-перехват-номера/ Покритикуйте, пожалуйста.
  23. Вот, что у меня получилось http://fire-monkey.ru/topic/4723-служба-перехват-номера/ Покритикуйте, пожалуйста.
×
×
  • Создать...